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

Unity中如何降低玩家后退、左右移动时的移动速度?

优化角色移动速度差异化的实现方案

不用单独判断每个WASD按键,那样既破坏Input.GetAxis自带的平滑输入效果,还会让代码冗余难维护。更简洁的方式是基于输入轴的方向,给不同的移动方向设置速度系数,具体实现如下:

首先在你的类里定义几个可调节的速度系数(建议设为公开变量,方便在Unity Inspector里实时调整数值):

public float walkSpeed = 5f;
public float sprintSpeed = 10f;
public float forwardSpeedMultiplier = 1f; // 前进速度倍率(正常)
public float backwardSpeedMultiplier = 0.7f; // 后退速度倍率(更慢)
public float strafeSpeedMultiplier = 0.8f; // 侧移速度倍率(较慢)
private CharacterController controller;
private float currentSpeed;

然后修改你的移动逻辑代码:

void Update()
{
    // 先处理冲刺切换,避免延迟一帧生效
    currentSpeed = Input.GetKey(KeyCode.LeftShift) ? sprintSpeed : walkSpeed;

    float x = Input.GetAxis("Horizontal");
    float z = Input.GetAxis("Vertical");

    // 给不同方向的输入应用对应的速度倍率
    float adjustedX = x * strafeSpeedMultiplier;
    float adjustedZ = z * (z > 0 ? forwardSpeedMultiplier : backwardSpeedMultiplier);

    Vector3 move = transform.right * adjustedX + transform.forward * adjustedZ;

    // 保持移动向量的最大长度为1,避免斜向移动速度过快
    if (move.magnitude > 1)
        move.Normalize();

    controller.Move(move * currentSpeed * Time.deltaTime);
}

方案优势:

  • 保留了Input.GetAxis的平滑输入特性,移动过渡更自然
  • 代码简洁易维护,调整速度倍率只需修改变量值,不用加一堆if判断
  • 可以在Inspector里实时调整各个方向的速度,方便调试

额外说明:

原代码里把speed的赋值放在controller.Move之后,会导致按下LeftShift的第一帧速度没更新,所以调整到了输入处理的最前面,让速度切换更及时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:50:27