Unity角色空中异常跳跃问题求助(附代码)
问题排查与解决方案
你的角色出现空中持续跳跃异常的核心原因是**Jump()方法未添加地面状态校验**,导致无论角色是否在空中,只要触发跳跃指令就会重置垂直速度,进而实现空中连跳。
具体问题点
当前Jump()方法直接修改垂直速度,完全没有限制触发条件:
public void Jump() { playerVelocity.y = Mathf.Sqrt(jumpHeight * -3.0f * gravity); }
即便你在Update()中更新了isGrounded状态,但跳跃逻辑本身未做校验,只要外部输入(比如按键检测)触发Jump(),就会执行跳跃操作。
修复方案
给Jump()方法添加地面状态判断,仅允许角色在落地时触发跳跃:
public void Jump() { // 只有在地面且垂直速度≤0时触发跳跃(确保角色完全落地,避免斜坡/边缘误判) if(isGrounded && playerVelocity.y <= 0) { playerVelocity.y = Mathf.Sqrt(jumpHeight * -3.0f * gravity); } }
额外验证建议
- 检查外部调用
Jump()的输入逻辑:使用Input.GetKeyDown()替代Input.GetKey(),确保单次按键仅触发一次跳跃 - 调整CharacterController组件的
Skin Width参数(建议设为0.01-0.05),避免isGrounded检测出现延迟或误判
内容的提问来源于stack exchange,提问作者Gobster07
相关产品推荐
相关产品推荐

