首页 > 解决方案 > 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;
    }

标签: unity3drigid-bodies

解决方案


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

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

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

推荐阅读