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

问题描述

我的代码

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

在旨在移动播放器的更新功能中,没有执行任何操作 接地的函数当前设置为返回true

解决方法

Nvm,我知道了,只是没有给予足够的力量

,

我无法发表评论,否则我会问更多问题,但是以下是一些我想帮助调试的事情:

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

  2. 您的速度够高吗?尝试将其设置为10,000之类的数字。如果由于某种原因您的物体真的很大时,它可能正在移动,但由于它的移动如此微小,您无法分辨。

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

  4. 尝试逐一删除代码中的元素,以查找引起问题的原因。您的语法似乎正确

,

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

也:

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

固定更新在每次物理更新之前都会被调用,因此您可以 不必担心时间安排和前后不一致。更新,在 另一方面,是根据帧速率而不是物理速度来调用的 更新。 More info on FixedUpdate()

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

  • 您是否考虑使用轴,而不是基于键码的输入?