Unity3d 限制相机在X轴上的旋转角度

Unity3d 限制相机在X轴上的旋转角度,unity3d,camera,rotation,Unity3d,Camera,Rotation,我的相机总是盯着一个对象A。我添加了一段代码,以便相机可以绕X轴旋转a,如下所示: 我的代码是这样的,每帧运行一次,根据鼠标的垂直移动移动相机: offset=transform.position-A.position; 偏移=四元数.AngleAxis(Input.GetAxis(“鼠标Y”),transform.right)*偏移; transform.position=A.position+offset; 变换。注视(位置); 它工作正常,但当相机试图在X轴上达到90度以上的角度时,它

我的相机总是盯着一个对象
A
。我添加了一段代码,以便相机可以绕X轴旋转
a
,如下所示:

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

offset=transform.position-A.position;
偏移=四元数.AngleAxis(Input.GetAxis(“鼠标Y”),transform.right)*偏移;
transform.position=A.position+offset;
变换。注视(位置);

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

您可以执行以下操作:

void FixedUpdate(){
     var rot = yourCamera.transform.rotation;
     rot.x = Mathf.Clamp(rot.x ,0,90);
     yourCamera.transform.rotation = rot;
}

Mathf.Clamp
将完成工作,并将
X
值保持在边界内。

您可以执行以下操作:

void FixedUpdate(){
     var rot = yourCamera.transform.rotation;
     rot.x = Mathf.Clamp(rot.x ,0,90);
     yourCamera.transform.rotation = rot;
}

Mathf.Clamp
将起作用,并将
X
值保持在边界内。

如果绿色向量是局部Y,蓝色是局部Z(作为单位): 您可以修复您的解决方案:

// 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);
} 
//夹钳。
偏移=变换位置-A位置;
偏移=四元数.AngleAxis(Input.GetAxis(“鼠标Y”),transform.right)*偏移;
浮动角度=数学Atan2(A.反向转换点(偏移).z,A.反向转换点(偏移).y)*数学Rad2Deg;
如果(角度>90华氏度和角度<180华氏度)
{
transform.position=A.position+offset;
Vector3 AUp=四元数角度轴(90f,-A.右)*偏移;
观察(A.位置,AUp);
} 

如果绿色向量是局部Y,蓝色向量是局部Z(作为单位): 您可以修复您的解决方案:

// 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);
} 
//夹钳。
偏移=变换位置-A位置;
偏移=四元数.AngleAxis(Input.GetAxis(“鼠标Y”),transform.right)*偏移;
浮动角度=数学Atan2(A.反向转换点(偏移).z,A.反向转换点(偏移).y)*数学Rad2Deg;
如果(角度>90华氏度和角度<180华氏度)
{
transform.position=A.position+offset;
Vector3 AUp=四元数角度轴(90f,-A.右)*偏移;
观察(A.位置,AUp);
} 

angle not Lonely(角度不是唯一的)与摄像机的运动有关,我想仅夹紧角度不是解决方案,因为它可能会使视角和位置不同步。angle not Lonely(角度不是唯一的)与摄像机的运动有关,我想仅仅夹紧角度不是解决方案,因为它可能会使视角和位置不同步。不起作用。事实上,有了这些代码,相机就不再移动了。你能从Unity上传一些截图来查看你的轴吗?没用。事实上,有了这些代码,相机就不会再移动了。你能从Unity上传一些截图来查看你的轴吗?