You need to enable JavaScript to run this app. Unity C# 自定义移动控制中左右移动速度远高于前后移动的问题
优惠活动
大模型
产品
解决方案
定价
更多

Unity C# 自定义移动控制中左右移动速度远高于前后移动的问题

问题核心根因
  • 左右移动速度异常的直接原因是向量计算使用了错误的API参数:
    原代码中左右移动的逻辑行:transform.position += transform.TransformVector(-90, 0, 0) * Time.deltaTime * xVelocity;
    TransformVector()的入参是本地空间的向量分量,并非欧拉旋转角度。传入(-90, 0, 0)会被解析为本地空间中x轴分量为-90的向量,无物体缩放的情况下,转换为世界空间后向量模长为90;而前后移动使用的transform.forward是模长为1的单位向量,两者速度计算基准差90倍,直接导致左右移动速度远高于前后。
修正方案
  • 左右方向对应本地空间的x轴,直接使用Unity内置的单位方向向量即可统一计算基准,无需手动传入向量分量。
  • 注意原逻辑的按键方向匹配:原错误代码使用x轴负方向向量和xVelocity正负匹配(A键加正xVelocity对应左移,D键加负xVelocity对应右移),可选择两种修正方式:
    1. 保留原有Control()方法的按键赋值逻辑,直接修改移动计算行:
    // 加负号匹配原有xVelocity的正负逻辑,使用单位向量统一模长
    transform.position += -transform.right * Time.deltaTime * xVelocity;
    
    1. 调整Control()方法中左右按键的赋值符号,使用更符合常规的方向逻辑:
    // Control()方法中替换左右按键的赋值
    if (Input.GetKey(KeyCode.A))
    {
        xVelocity -= speed;
    }
    if (Input.GetKey(KeyCode.D))
    {
        xVelocity += speed;
    }
    // 移动计算行直接使用transform.right
    transform.position += transform.right * Time.deltaTime * xVelocity;
    
  • 补充优化建议:当前速度累加没有设置上限,长按按键时velocity会无限增大,可根据需求在Control()方法中对xVelocity、zVelocity做最大值限制,避免速度失控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 00:54:07