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

Unity玩家沿世界坐标系前进问题:如何让玩家朝自身朝向移动?

Unity玩家移动不跟随朝向的问题解决

问题根源

  1. 你的移动方向直接用了世界坐标系的Vector3(-vertical, 0, 0),完全和玩家自身的朝向无关,所以不管玩家转多少角度,移动方向都固定不变。
  2. 代码里的transform.TransformDirection(Vector3.forward)虽然能把玩家局部前方向转成世界方向,但你没把这个结果赋值给任何变量,等于白执行了这行代码。
  3. 逻辑上也有偏差:Unity默认的Vertical轴对应前后移动,你却用它控制X轴方向,和常规W/S控制前后的操作逻辑不匹配。

解决方法

核心思路

让移动方向基于玩家自身的局部前方向,而非固定的世界坐标。

修正后的代码

void PlayerMover()
{
    _step = _speed * _speedMultiplier * Time.deltaTime;

    PlayerBoost();
    float vertical = Input.GetAxis("Vertical");

    PlayerRotation();

    // 用玩家自身的前方向乘以输入值,得到跟随朝向的移动方向
    Vector3 direction = transform.forward * vertical;
    // 锁定Y轴,确保只在水平面上移动
    direction.y = 0;
    transform.position += direction * _step;
}

关键细节解释

  • transform.forward是Unity封装好的属性,直接返回玩家自身"前方"对应的世界坐标系方向向量,等价于你之前写的transform.TransformDirection(Vector3.forward),但更简洁。
  • 加上direction.y = 0是为了避免玩家因为模型倾斜、地形高度差等原因出现意外的上下移动,保证移动始终在水平面上。
  • 如果你的操作逻辑是W/S控制前后、A/D控制左右,可以补充水平方向的处理:
    float horizontal = Input.GetAxis("Horizontal");
    Vector3 direction = transform.forward * vertical + transform.right * horizontal;
    direction.y = 0;
    direction.Normalize(); // 防止斜向移动时速度翻倍
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:40:01