unity - 使用刚体错误跳转

问题描述

我试图用刚体跳跃,有时我的跳跃很低,就像它堆在某个东西上,有时很高。为什么会发生变化?

感谢您的回答

我的代码

private void Update() {

    if (Input.GetKeyDown(KeyCode.Space) && isGrounded) Jump();
}

private void FixedUpdate()
{
    isGrounded = Physics.CheckSphere(groundCheck.position,0.2f,groundMask);
}

private void Jump()
    {
        rigidbody.AddForce(Vector3.up * 20,ForceMode.VeLocityChange);
        isGrounded = false;
    }

解决方法

首先,根据 Unity 文档 here,任何有关 Rigidbody 的物理计算(例如 Jump() 中的物理计算)都应始终在 FixedUpdate() 函数内完成。 FixedUpdate() 以默认的固定速率每 0.02 秒运行一次,而 Update() 每帧运行一次,这对于它运行的每台机器都会有所不同。

我没有为您重新发明轮子,而是进行了搜索,并在 Unity 论坛 here 上找到了以下代码,它应该可以帮助您进一步了解您的问题。我在那里使用了代码并根据您的场景对其进行了编辑。

private bool shouldJump = false;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
    {
       shouldJump = true;
    }
}

void FixedUpdate()
{
    // Check for jump
    if (isGrounded && shouldJump)
    {
        shouldJump = false;

        rigidbody.AddForce(Vector3.up * 20.0f,ForceMode.VelocityChange);
    }
}