You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:35:07