我试图让我的游戏对象向前和向后移动,但每次我按 w 或 s 时,它根本不会移动。对于 a 和 d,它们将使游戏对象移动。
这是我的代码:
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public Rigidbody rb;
public float forwardForce = 2000f;
public float sidewaysForce = 500f;
void FixedUpdate()
{
if (Input.GetKey("w"))
{
rb.AddForce(0, forwardForce * Time.deltaTime, 0);
}
if (Input.GetKey("a"))
{
rb.AddForce(-sidewaysForce * Time.deltaTime, 0, 0);
}
if (Input.GetKey("s"))
{
rb.AddForce(0, -forwardForce * Time.deltaTime, 0);
}
if (Input.GetKey("d"))
{
rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0);
}
}
}
任何建议都会非常有帮助。
Unity 使用 left-handed 轴系统,因此向量中的第一个参数您已正确地将左/右放置为向量的 x 参数,但是对于向前和向后,您可能需要使用 z 轴(在/出)
rb.AddForce(0, 0, forwardForce * Time.fixedDeltaTime);
另外,在固定更新中施加力量对您有好处,但请记住在固定更新时使用
Time.fixedDeltaTime
,因为常规增量时间在这里可能没有正确的值
如果这没有帮助,在
fixedUpdate
期间捕获输入可能会出现一些问题,我认为最好的形式是在 update
中捕获输入,并设置一些标志,这些标志将在 fixedUpdate
中读取,您可以在其中应用您的物理。