我试图在 3D 环境中利用力量让我的玩家动作敏捷。我尝试了一些事情,但从我的玩家在游戏中的反应来看,我认为我遗漏了一些信息。
public Rigidbody rb;
public float acceleration = 500f;
public UnityEngine.ForceMode forceMode = ForceMode.Impulse;
void Update() {
rb.AddRelativeForce(new Vector3(Input.GetAxis("Horizontal") * acceleration * Time.deltaTime, 0, Input.GetAxis("Vertical") * acceleration * Time.deltaTime), forceMode);
rb.velocity = Vector3.zero;
}
Run Code Online (Sandbox Code Playgroud)
首先,为什么这段代码仍然允许我移动我的玩家?每帧将速度重置为 0 应该可以防止它移动,不是吗?我猜即使速度始终设置为 0,力仍然会施加在后续帧上?
我应该如何使用力来获得真正快速的运动,当我停止按 UP 时,施加在 Z 轴上的力就会“停止”?
需要注意的重要一点是统一脚本和功能的执行顺序。物理学的工作方式实际上有点微妙,并且很可能会导致您的问题。
解决问题的快速方法可能是将速度设置为 0 后让刚体进入睡眠状态:
rb.Sleep();
Run Code Online (Sandbox Code Playgroud)
这确保了内部物理更新的执行不会进一步影响该刚体。通常,您不需要手动处理刚体的 Sleep() 和 WakeUp(),因为它们是根据碰撞或速度阈值自动调用的,但在这种情况下,它将防止排队的 AddForce 在速度归零后影响 RB 。
| 归档时间: |
|
| 查看次数: |
3542 次 |
| 最近记录: |