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

Unity3D布尔值使用问题:蹲下时无法禁用玩家冲刺功能

问题分析与修复方案

你的核心问题出在isCrouching = !isCrouching;这行代码上——它会在每一帧都翻转isCrouching的状态,导致这个布尔值在true和false之间疯狂切换,完全无法正确反映玩家是否处于蹲伏状态,自然让canDash的逻辑彻底失效。

下面是修正后的完整代码,同时保留你原本的平滑蹲伏过渡效果:

bool canDash = true;
bool isCrouching = false;
bool isCeilingAbove; // 基于Physics.CheckSphere和GameObject的检测结果

// 补全你原代码中应该存在的变量(方便参考)
CharacterController cc;
float startHeight;
float crouchHeight;
Vector3 startCenter;
Vector3 crouchCenter;
float currentCrouchAmount = 0f;
float currentCrouchVelocity = 0f;
float dashCooldown;

void Update()
{
    dashCooldown -= Time.deltaTime;

    if (isCeilingAbove)
    {
        // 有天花板时强制退出蹲伏
        currentCrouchAmount = 0f;
        isCrouching = false;
    }
    else
    {
        // 平滑过渡蹲伏状态
        float crouchTargetValue = Input.GetKey(KeyCode.LeftControl) ? 1f : 0f;
        currentCrouchAmount = Mathf.SmoothDamp(currentCrouchAmount, crouchTargetValue, ref currentCrouchVelocity, 0.25f);

        // 应用CharacterController的高度和中心变化
        cc.height = Mathf.Lerp(startHeight, crouchHeight, currentCrouchAmount);
        cc.center = Vector3.Lerp(startCenter, crouchCenter, currentCrouchAmount);

        // 根据当前蹲伏进度判断是否处于蹲伏状态
        // 用0.5作为阈值,过渡到一半以上时判定为蹲伏,可根据手感调整
        isCrouching = currentCrouchAmount > 0.5f;
    }

    // 控制冲刺权限:蹲伏或头顶有天花板时禁止冲刺
    canDash = !isCrouching && !isCeilingAbove;

    // 冲刺逻辑合并简化
    if (canDash && Input.GetKey(KeyCode.V) && dashCooldown <= 0)
    {
        StartCoroutine(Dash());
    }
}

IEnumerator Dash()
{
    // 示例:重置冷却时间,替换为你的冲刺逻辑
    dashCooldown = 2f;
    // ... 其他冲刺相关代码
    yield return null;
}

关键修改说明:

  • 删掉了疯狂翻转isCrouching的错误代码,改为基于实际蹲伏进度currentCrouchAmount判断状态,避免逻辑混乱
  • 统一了canDash的判断逻辑,确保只有玩家既不蹲伏、头顶也无障碍物时才允许冲刺
  • 合并了分散的条件判断,让代码逻辑更清晰

你的基础蹲伏代码之所以能正常工作,是因为它直接同步输入状态与isCrouching、canDash,没有平滑过渡的中间状态;而平滑过渡版本必须基于实际的蹲伏进度判断,不能直接用输入状态赋值。

内容的提问来源于stack exchange,提问作者dangoqut132

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:07:49