Unity3D中如何在空中取消跳跃?CharacterController实现问题
解决CharacterController取消跳跃的问题
你的问题核心在于:仅修改isInAir变量不会直接改变角色的运动状态——角色的上升/下落完全由velocity.y控制,isInAir只是一个状态标记,无法直接干预运动逻辑。
要实现按下按键后立即停止跳跃并快速落地,只需在触发按键时直接重置velocity.y为向下的数值,强制角色进入下落状态:
修改后的代码如下:
float jumpHeight = 10f; float gravity = -9.81f; bool isInAir = false; void Update() { if (isGrounded && velocity.y < 0) // 落地时重置状态 { velocity.y = -2f; isInAir = false; } if (isGrounded && Input.GetButtonDown("Jump")) { velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity); isInAir = true; } // 按下F键时直接强制角色下落 if (Input.GetKey(KeyCode.F)) { isInAir = false; // 设置向下的初始速度,立即抵消上升趋势并开始下落 velocity.y = -2f; } velocity.y += gravity * Time.deltaTime; controller.Move(velocity * Time.deltaTime); }
关键说明:
- 直接修改
velocity.y是核心操作:将其设为负数(比如-2)会立刻抵消当前的上升速度,让角色在重力作用下快速下落。 - 同步修改
isInAir是为了保持状态一致性,避免后续跳跃逻辑出现异常。 - 该逻辑支持跑动跳跃场景:
controller.Move会同时处理水平与垂直方向运动,修改垂直速度不会干扰角色的水平移动。
内容的提问来源于stack exchange,提问作者RelevantUni98
相关产品推荐
相关产品推荐

