Unity第一人称相机视角限制问题求助:设置后无法旋转
第一人称相机视角限制问题修复方案
你的代码里有两个关键问题导致相机无法旋转甚至抖动:
- 鼠标Y轴输入被存到了
CamMovement.x,但后续操作的是CamMovement.y,等于完全没用到鼠标输入,相机自然转不动。 - 直接用
transform.Rotate累积旋转角度,没法精准控制总视角范围,调整数值后出现抖动也源于此。
下面是修正后的代码,附带详细注释:
using UnityEngine; public class CameraMovement : MonoBehaviour { // 相机旋转速度,可在Inspector面板调整 public float cameraSpeed = 5f; // 存储当前相机的垂直旋转总角度 private float verticalRotation = 0f; // 自定义视角限制范围,对应你需要的-70到85 public float minVerticalAngle = -70f; public float maxVerticalAngle = 85f; void Update() { // 获取鼠标垂直方向的输入值 float mouseYInput = Input.GetAxis("Mouse Y"); // 累积垂直旋转角度(反向是因为Unity鼠标输入默认和视角方向相反) verticalRotation -= mouseYInput * cameraSpeed; // 把总旋转角度限制在设定的范围内 verticalRotation = Mathf.Clamp(verticalRotation, minVerticalAngle, maxVerticalAngle); // 直接设置相机的欧拉角:保持水平旋转不变,只更新垂直旋转 transform.localEulerAngles = new Vector3(verticalRotation, transform.localEulerAngles.y, 0f); } }
关键改动说明:
- 删掉了没用的
CamMovement向量,直接处理鼠标输入,避免变量误用。 - 用
verticalRotation记录总垂直旋转角度,替代直接操作transform.Rotate,解决角度累积误差和抖动问题。 - 对总旋转角度做
Clamp限制,而不是每帧的输入值,确保视角严格卡在你需要的范围内。 - 通过
localEulerAngles直接设置旋转值,比Rotate更精准,避免角度叠加导致的异常。
内容的提问来源于stack exchange,提问作者DINOTICK
相关产品推荐
相关产品推荐

