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

Unity俯视角游戏冲刺功能异常:控制台显速度变化但角色无动作

俯视角游戏冲刺功能故障排查:Velocity已修改但角色无动作

核心问题原因

你的代码中,FixedUpdate方法没有判断isDashing状态。当按下空格触发Dash协程后,虽然设置了冲刺的velocity并打印出正确数值,但FixedUpdate会在每帧物理帧执行常规移动逻辑,直接把velocity重新覆盖为行走/奔跑速度。控制台打印的是刚设置的冲刺速度,但下一个物理帧就被改回去了,导致角色完全没有冲刺动作。

修复步骤

在FixedUpdate方法开头添加isDashing的判断,确保冲刺期间不执行常规移动的velocity赋值:

void FixedUpdate()
{
    if (isDashing) return; // 新增该行,冲刺时跳过常规移动逻辑

    if (!isSprinting)
    {   //Walking
        if (HorV)
            rigid.velocity = new Vector2(horz, 0) * walkSpeed;
        else
            rigid.velocity = new Vector2(0, vert) * walkSpeed;
    }
    else
    {   //Sprinting
        if (HorV)
            rigid.velocity = new Vector2(horz, 0) * sprintSpeed;
        else
            rigid.velocity = new Vector2(0, vert) * sprintSpeed;
    }
}

额外优化建议(可选)

  • 冲刺期间可以锁定当前的冲刺方向,避免Update中horz/vert被重置为0(比如松开方向键时)导致冲刺中途减速。可以在Dash协程里先记录当前的方向向量,再用这个固定值设置velocity:
    private IEnumerator Dash() {
        canDash = false;
        isDashing = true;
        // 记录当前冲刺方向,避免后续Update修改horz/vert影响冲刺
        Vector2 dashDir = HorV ? new Vector2(horz, 0) : new Vector2(0, vert);
        rigid.velocity = dashDir * dashingPower;
        Debug.Log(rigid.velocity);
        tr.emitting = true;
        yield return new WaitForSeconds(dashingTime);
        tr.emitting = false;
        isDashing = false;
        yield return new WaitForSeconds(dashingCoolDown);
        canDash = true;
    }
    
  • 确保TrailRenderer的参数设置正确(比如宽度、持续时间),这样冲刺时的拖尾效果能正常显示,辅助验证冲刺是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:50