【发布时间】:2019-11-18 12:50:25
【问题描述】:
我正在尝试使用力在 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;
}
首先,为什么这段代码仍然允许我移动我的播放器?每帧将速度重置为 0 应该可以防止它移动,不是吗?我猜即使速度一直设置为 0,力仍然会施加在后续帧上?
我应该如何使用力来获得真正快速的运动,当我停止按 UP 时,施加在 Z 轴上的力“停止”?
【问题讨论】:
-
你不应该使用更新来做任何基于物理的事情。改用 FixedUpdate
-
为什么要
rb.AddRelativeForce并在它设置rb.velocity = Vector3.zero之后? -
@derHugo 这更像是一个测试,看看我是否理解事情是如何运作的,因为在对它施加力后我无法停止我的对象。所以我就像“我要在施加力后重置速度,看看它会做什么”。我希望我的对象不会移动。但它是......
标签: unity3d