首页 > 解决方案 > 限制相机在 X 轴上的旋转角度

问题描述

我的相机总是在看一个物体A。我添加了一段代码,让相机可以绕AX轴旋转,如下图:

在此处输入图像描述

我的代码是这样的,每一帧都运行,根据鼠标垂直移动移动相机:

offset = transform.position - A.position;
offset = Quaternion.AngleAxis(Input.GetAxis("Mouse Y"), transform.right) * offset;
transform.position = A.position + offset;
transform.LookAt(A.position);

它工作正常,但是当相机试图在 X 轴上达到超过 90 的角度时,它开始出现错误并反转图像。如何限制相机角度,使其仅从 0 度移动到 90 度?游戏开始时,摄像机A从 X 轴 30º 的角度观看。

标签: unity3dcamerarotation

解决方案


如果您的绿色 Vector 是 A local Y,蓝色是 A local Z(作为 Unity):您可以修复您的解决方案:

// Fix.
offset = transform.position - A.position;
offset = Quaternion.AngleAxis(Input.GetAxis("Mouse Y"), transform.right) * offset;
transform.position = A.position + offset;

Vector3 AUp = Quaternion.AngleAxis(90f, -A.right) * offset;
transform.LookAt(A.position, AUp);

像这样夹紧:

// Clamp.        
offset = transform.position - A.position;
offset = Quaternion.AngleAxis(Input.GetAxis("Mouse Y"), transform.right) * offset;
float angle = Mathf.Atan2(A.InverseTransformPoint(offset).z, A.InverseTransformPoint(offset).y) * Mathf.Rad2Deg;

if (angle > 90f && angle < 180f)
{
    transform.position = A.position + offset;
    Vector3 AUp = Quaternion.AngleAxis(90f, -A.right) * offset;
    transform.LookAt(A.position, AUp);
} 

推荐阅读