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);
}
}
我正在尝试用刚体跳跃,有时我的跳跃很低,就像它堆叠在某物中,有时又很高。为什么会变?
感谢您的回答
我的代码:
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);
}
}