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
相关产品推荐
相关产品推荐

