unity - 用刚体错误跳跃

unity - jump with rigidbody bug

我正在尝试用刚体跳跃,有时我的跳跃很低,就像它堆叠在某物中,有时又很高。为什么会变?

感谢您的回答

我的代码:

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,任何关于刚体的物理计算(例如您 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);
    }
}