问题描述
我试图用刚体跳跃,有时我的跳跃很低,就像它堆在某个东西上,有时很高。为什么会发生变化?
感谢您的回答
我的代码:
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);
}
}