Unity相机Y轴旋转异常:旋转后立即归位问题求助
问题根源
你的代码中,相机的Y轴旋转被硬编码为0f:
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
这行代码会强制把相机的Y轴旋转重置为0,无论你怎么尝试旋转Y轴,都会立刻回到零点。这就是问题的核心。
修复方案
根据你想要的视角逻辑,提供两种常用修复方式:
方案1:自由视角相机(独立控制X/Y轴旋转)
适合需要相机自由转动、玩家身体不跟随的场景:
- 在脚本中添加
private float yRotation = 0f;,用于保存Y轴旋转值 - 替换Update中的旋转处理代码:
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; // 处理上下旋转(X轴) xRotation -= mouseY; xRotation = Mathf.Clamp(xRotation, -90f, 90f); // 处理左右旋转(Y轴) yRotation += mouseX; // 应用完整旋转到相机 transform.localRotation = Quaternion.Euler(xRotation, yRotation, 0f); // 不需要的话可以移除playerBody旋转代码 // playerBody.Rotate(Vector3.up * mouseX);
方案2:标准FPS视角(相机上下转,身体左右转)
这是FPS游戏的经典逻辑,相机作为玩家身体的子物体,自动同步身体的左右旋转:
- 将相机对象拖入
playerBody对象层级,设为其子物体 - 保留原脚本的旋转逻辑,但确保脚本挂载在玩家身体的CharacterController对象上(而非相机):
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime; float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime; // 相机仅处理上下旋转(X轴) xRotation -= mouseY; xRotation = Mathf.Clamp(xRotation, -90f, 90f); transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f); // 玩家身体处理左右旋转(Y轴) playerBody.Rotate(Vector3.up * mouseX);
此时相机的Y轴旋转会继承父物体playerBody的旋转,不会被重置,同时上下旋转角度被限制在合理范围,避免翻转。
额外检查
- 确认脚本挂载对象正确:方案1挂相机,方案2挂玩家身体(带CharacterController的对象)
- 移除多余的
Debug.Log代码,避免影响性能
内容的提问来源于stack exchange,提问作者ertoletik
相关产品推荐
相关产品推荐

