Unity 2021.1.3f1下自定义第一人称角色移动无法适配相机朝向求助
问题根源
你当前的移动向量计算绑定的是脚本挂载的Player根节点自身的transform朝向,如果你的鼠标视角旋转仅作用在子相机上、没有同步旋转Player根节点的水平朝向,就会出现相机已经转向但移动方向仍和初始世界朝向一致的问题。如果后续直接复用完整的相机朝向计算移动,还会带入俯仰角度带来的Y轴偏移,导致抬头移动时飘向空中、低头时钻入地下。
修复方案
调整移动向量的计算逻辑,基于相机的水平朝向计算移动方向,过滤俯仰带来的Y轴分量,同时对斜向移动的向量做归一化,避免斜走速度比直走快。
修改后的完整脚本如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public CharacterController controller; // 新增字段:将场景中第一人称相机的Transform拖入该字段 public Transform cameraTransform; public float speed = 12f; void Update() { float x = Input.GetAxisRaw("Horizontal"); float z = Input.GetAxisRaw("Vertical"); // 提取相机的水平朝向,清除Y轴分量过滤俯仰影响 Vector3 camRight = cameraTransform.right; camRight.y = 0; Vector3 camForward = cameraTransform.forward; camForward.y = 0; // 计算移动向量,归一化避免斜向移动速度异常 Vector3 move = camRight * x + camForward * z; move.Normalize(); controller.Move(move * speed * Time.deltaTime); } }
配置说明
- 将Player对象下挂载的第一人称相机组件,拖到脚本新增的
cameraTransform字段中即可。 - 该写法适配所有FPS视角旋转逻辑:无论你是把水平旋转绑定在Player根节点还是子相机上,都能正确匹配当前相机的朝向计算移动方向。
内容的提问来源于stack exchange,提问作者Лев Иванцов
相关产品推荐
相关产品推荐

