为什么 RigidbodyAddForce 不移动我的胶囊?

why is RigidbodyAddForce not moving my Capsule?

我的代码

        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);

在旨在移动玩家的更新函数中什么也没做 grounded 函数当前设置为 return true

Nvm,我明白了,我只是没有给它足够的力量

我还不能发表评论,否则我会问更多问题,但这里有一些我会尝试帮助调试的东西:

  1. Grounded() 是否返回真值?尝试在打印 Grounded() 的 FixedUpdate 中放置一个打印语句,以确保它返回 true。

  2. 你的速度够快吗?尝试将其设置为 10,000 之类的数字。有可能,如果您的对象由于某种原因非常大,它正在移动,但您无法分辨,因为它的移动非常轻微。

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

  4. 尝试一个一个地删除代码中的元素,找出导致问题的原因。您的语法似乎是正确的

它应该可以工作,确保速度变量不为 0。

另外:

  • 您应该在 FixedUpdate() 中执行与 Rigidbody 相关的所有操作,但将您的输入保留在 Update() 中。

Fixed Update is called exactly before every physics update, so you do not have to worry about timing and inconsistencies. Update, on the other hand, is called based on framerate and not the speed of physics updates. More info on FixedUpdate()

那么您必须将 Time.deltaTime 替换为 Time.fixedDeltaTime

  • 您是否考虑过使用轴代替 keycode-based 输入?