Unity3D FPS项目添加旋转代码后无法水平转动视角如何解决?
问题修复方案
根本原因
你遇到的问题是两点操作不匹配教程要求导致的:
- 脚本挂载位置错误
- 代码执行顺序逻辑有误
当MouseLook脚本挂载到玩家根对象而非主相机时,transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);会强制把玩家的Y轴旋转重置为0,直接覆盖掉PlayerBody.Rotate产生的水平旋转效果,因此无法左右转动视角。
修复步骤
1. 调整脚本挂载位置
- 将
MouseLook脚本从玩家根对象取下,挂载到主相机上 - 把玩家根对象拖入Inspector面板中
MouseLook脚本的PlayerBody参数插槽 - 确认主相机是玩家根对象的子物体,保证相机跟随玩家移动
2. 调整代码执行顺序
将Update函数内的两行代码交换顺序,先执行玩家身体的水平旋转,再执行相机的俯仰旋转,修改后的代码片段如下:
xRotation -= mouseY; xRotation = Mathf.Clamp(xRotation,-90,90f); // 先执行玩家身体水平旋转 PlayerBody.Rotate(Vector3.up * mouseX); // 再执行相机上下俯仰 transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
输入报错补充修复
如果出现旧输入系统相关报错,按以下操作处理:
- 打开
Project Settings > Player > Active Input Handling - 选择
Both选项,兼容新旧两套输入系统即可
内容的提问来源于stack exchange,提问作者MUCHUAN SU
相关产品推荐
相关产品推荐

