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

Unity相机Y轴旋转异常:旋转后立即归位问题求助

问题根源

你的代码中,相机的Y轴旋转被硬编码为0f:

transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

这行代码会强制把相机的Y轴旋转重置为0,无论你怎么尝试旋转Y轴,都会立刻回到零点。这就是问题的核心。

修复方案

根据你想要的视角逻辑,提供两种常用修复方式:


方案1:自由视角相机(独立控制X/Y轴旋转)

适合需要相机自由转动、玩家身体不跟随的场景:

  1. 在脚本中添加private float yRotation = 0f;,用于保存Y轴旋转值
  2. 替换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游戏的经典逻辑,相机作为玩家身体的子物体,自动同步身体的左右旋转:

  1. 将相机对象拖入playerBody对象层级,设为其子物体
  2. 保留原脚本的旋转逻辑,但确保脚本挂载在玩家身体的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:20:09