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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:07:05