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对应右移),可选择两种修正方式:- 保留原有
Control()方法的按键赋值逻辑,直接修改移动计算行:
// 加负号匹配原有xVelocity的正负逻辑,使用单位向量统一模长 transform.position += -transform.right * Time.deltaTime * xVelocity;- 调整
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
相关产品推荐
相关产品推荐

