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

Unity中Input.GetKey失效,2D平台角色跑速倍率不生效问题

问题分析与解决方案

核心问题:代码执行顺序错误

你的代码里先计算并设置了玩家速度,之后才根据Shift按键状态更新_speedMultiplier,导致当前帧的速度无法应用最新的倍率,要等到下一帧才会生效,所以按下Shift后速度没有立刻变化。

修复后的代码

调整代码执行顺序,先更新速度倍率,再计算移动速度:

private void WalkRun()
{
    _inputX = Input.GetAxis("Horizontal");
    
    // 先根据按键和地面状态更新速度倍率
    _Run = Input.GetKey(KeyCode.LeftShift);
    _speedMultiplier = (_Run && _grounded) ? 2f : 1f;
    
    // 再计算并应用最终移动速度
    _rb.velocity = new Vector2(_inputX * _moveSpeed * _speedMultiplier, _rb.velocity.y);
}

额外排查点

  • 检查_grounded变量的逻辑是否正确:确保玩家接触地面时该值为true,如果_grounded始终为false,即使按下Shift也不会触发奔跑倍率。
  • 确认_moveSpeed和_speedMultiplier的初始值是否正常,比如_speedMultiplier初始是否设为1f。
  • 可以在奔跑分支里添加Debug.Log("Running mode activated"),验证是否正确进入了奔跑逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:48:21