Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 刚体在将其速度设置为0时不会立即停止_Unity3d - Fatal编程技术网

Unity3d 刚体在将其速度设置为0时不会立即停止

Unity3d 刚体在将其速度设置为0时不会立即停止,unity3d,Unity3d,我试图在3D环境中,使用力使我的玩家的动作敏捷。我尝试了一些方法,但从我的玩家在游戏中的反应来看,我想我遗漏了一些信息 public Rigidbody rb; public float acceleration = 500f; public UnityEngine.ForceMode forceMode = ForceMode.Impulse; void Update() { rb.AddRelativeForce(new Vector3(Input.GetAxis("Horizo

我试图在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,力仍会作用在后续帧上


当我停止向上按压时,施加在Z轴上的力“停止”?我应该如何使用力来获得真正快速的移动?需要注意的是统一脚本和功能的重要性。物理学的工作方式实际上有点微妙,很可能会引起你的问题

快速解决问题的方法可能类似于将“速度”设置为0后使刚体进入睡眠状态:

rb.Sleep();

这确保内部物理更新的执行不会进一步影响该刚体。通常不需要手动处理刚体的Sleep()和WakeUp(),因为它们是基于碰撞或速度阈值自动调用的,但在这种情况下,它将防止排队的AddForce在其速度归零后影响RB。

需要注意的是统一脚本和功能的重要性。物理学的工作方式实际上有点微妙,很可能会引起你的问题

快速解决问题的方法可能类似于将“速度”设置为0后使刚体进入睡眠状态:

rb.Sleep();

这确保内部物理更新的执行不会进一步影响该刚体。通常,您不需要手动处理刚体的Sleep()和WakeUp(),因为它们是根据碰撞或速度阈值自动调用的,但在这种情况下,它将防止排队的AddForce在RB的速度为零后影响RB。

决不能使用Update执行任何基于物理的操作。使用FixedUpdate而不是。为什么要
rb.AddRelativeForce
并在设置
rb.velocity=Vector3.zero
?@derHugo这更像是一个测试,看看我是否了解事情是如何运作的,因为我在对物体施加力后很难停止我的物体。所以我想“我要在施加力后重新设定速度,看看它有什么作用”。我希望我的目标不会移动。但它是…你不应该使用更新来做任何基于物理的事情。使用FixedUpdate而不是。为什么要
rb.AddRelativeForce
并在设置
rb.velocity=Vector3.zero
?@derHugo这更像是一个测试,看看我是否了解事情是如何运作的,因为我在对物体施加力后很难停止我的物体。所以我想“我要在施加力后重新设定速度,看看它有什么作用”。我希望我的目标不会移动。但它是……谢谢。你说得对,这和订单有关。我发现另一个线程,他们提到AddForce被延迟。但无论如何,我的问题的根源真的是“愚蠢”。GetAxis不会在释放按钮后立即返回0。。。这就是为什么我的角色在滑动。。。使用GetAxisRaw解决了所有问题。啊,这是GetAxis平滑您的输入和内部物理延迟的组合?狡猾,但干得好@Robin!谢谢你说得对,这和订单有关。我发现另一个线程,他们提到AddForce被延迟。但无论如何,我的问题的根源真的是“愚蠢”。GetAxis不会在释放按钮后立即返回0。。。这就是为什么我的角色在滑动。。。使用GetAxisRaw解决了所有问题。啊,这是GetAxis平滑您的输入和内部物理延迟的组合?狡猾,但干得好@Robin!