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

