Unity3d 为什么RigidbodyAddForce不移动我的太空舱?

Unity3d 为什么RigidbodyAddForce不移动我的太空舱?,unity3d,rigid-bodies,Unity3d,Rigid Bodies,我的代码 在“更新”功能中,用于移动播放器的功能没有执行任何操作 此外,grounded函数当前设置为返回trueNvm,我发现,我只是没有给它足够的力我还不能评论,否则我会问更多问题,但以下是一些我尝试帮助调试的东西: founded()返回真值吗?尝试在FixedUpdate中放入一条打印Ground()的print语句,以确保它返回true 你的速度够快吗?尝试将其设置为10000之类的数字。有可能,如果你的物体因为某种原因是一个很大的尺度,它在移动,但你不能分辨,因为它是如此轻微的移动

我的代码

在“更新”功能中,用于移动播放器的功能没有执行任何操作
此外,grounded函数当前设置为返回true

Nvm,我发现,我只是没有给它足够的力

我还不能评论,否则我会问更多问题,但以下是一些我尝试帮助调试的东西:

  • founded()返回真值吗?尝试在FixedUpdate中放入一条打印Ground()的print语句,以确保它返回true

  • 你的速度够快吗?尝试将其设置为10000之类的数字。有可能,如果你的物体因为某种原因是一个很大的尺度,它在移动,但你不能分辨,因为它是如此轻微的移动

  • 确保rb正在调用有效的刚体。仅凭这段代码,我无法确保刚体设置正确

  • 尝试逐个删除代码中的元素,以找到导致问题的原因。您的语法似乎是正确的


  • 它应该工作,确保速度变量不是0

    此外:

    • 您应该在FixedUpdate()中执行与刚体相关的所有操作,但将输入保留在Update()中
    每次物理更新之前都会调用Fixed Update,所以您会这样做 不必担心时间和不一致性。更新,在 另一方面,它是基于帧率而不是物理速度来调用的 更新

    然后您必须将
    Time.deltaTime
    替换为
    Time.fixedDeltaTime

      你考虑使用轴代替基于键码的输入吗?
            if (Input.GetKey(KeyCode.W) && Grounded()) rb.AddForce(transform.forward * speed * Time.deltaTime, ForceMode.Acceleration);
            if (Input.GetKey(KeyCode.S) && Grounded()) rb.AddForce(-transform.forward * speed * Time.deltaTime, ForceMode.Acceleration);
            if (Input.GetKey(KeyCode.D) && Grounded()) rb.AddForce(transform.right * speed * 0.75f * Time.deltaTime, ForceMode.Acceleration);
            if (Input.GetKey(KeyCode.A) && Grounded()) rb.AddForce(-transform.right * speed * 0.75f * Time.deltaTime, ForceMode.Acceleration);