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

Unity实现围绕物体旋转的相机无法Clamp限制旋转角度问题

问题原因

你当前代码中Mathf.Clamp限制的是单帧鼠标移动产生的旋转增量,而非相机绕物体旋转的累计总角度,所以限制逻辑不会生效,相机依然可以无限制转动。

修复方案

需要新增一个成员变量存储累计的Y轴旋转角度,每次把单帧的旋转增量累加到这个变量后再做范围限制,最后用限制后的总角度更新相机旋转即可。

步骤1:新增成员变量

在类中新增如下字段存储累计旋转角度:

// 存储相机绕Y轴的累计旋转角度
private float m_CurrentYRotation = 0f;

步骤2:修改旋转逻辑

把原有逻辑替换为如下代码:

//First - Get the Initial Position
if (Input.GetMouseButtonDown(0))
{
    mPreviousPosition = mCamRef.ScreenToViewportPoint(Input.mousePosition);
}

//Second - the difference amount and change in x
if (Input.GetMouseButton(0))
{
    Vector3 newPosition = mCamRef.ScreenToViewportPoint(Input.mousePosition);
    Vector3 direction = mPreviousPosition - newPosition;
    
    // 计算单帧旋转增量
    float deltaRotation = -direction.x * 180;
    // 累加到总旋转角度
    m_CurrentYRotation += deltaRotation;
    // 限制总旋转角度的范围
    m_CurrentYRotation = Mathf.Clamp(m_CurrentYRotation, -60f,60f);

    mCamRef.transform.position = mTargetToRotateAround.position;
    // 用限制后的总角度设置旋转
    mCamRef.transform.rotation = Quaternion.Euler(Vector3.up * m_CurrentYRotation);

    mCamRef.transform.Translate(new Vector3(mDistanceToTarget.x, mDistanceToTarget.y, -mDistanceToTarget.z));
    mPreviousPosition = newPosition;
}

补充说明

如果需要对上下俯仰角度做限制,也可以用相同逻辑新增对应的累计角度变量处理。

内容的提问来源于stack exchange,提问作者IcyThug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:15:03