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
相关产品推荐
相关产品推荐

