C# Unity Mathf.clamp未按预期工作?

C# Unity Mathf.clamp未按预期工作?,c#,unity3d,C#,Unity3d,我正在做一个第一人称射击游戏,我想限制相机的旋转。我已经使用Math.clamp来夹紧角度,但当角度达到0时,它会夹紧到最大角度。它应该在-24华氏度之前不会夹紧。我怎样才能解决这个问题 public void CameraRotate(Vector3 camrotate){ cam.transform.Rotate (camrotate*Time.deltatime); temporaryangle = cam.transform.eulerAngles;

我正在做一个第一人称射击游戏,我想限制相机的旋转。我已经使用Math.clamp来夹紧角度,但当角度达到0时,它会夹紧到最大角度。它应该在-24华氏度之前不会夹紧。我怎样才能解决这个问题

 public void CameraRotate(Vector3 camrotate){

cam.transform.Rotate (camrotate*Time.deltatime);
        temporaryangle = cam.transform.eulerAngles;
        temporaryangle= new Vector3 (Mathf.Clamp(cam.transform.eulerAngles.x,-24f,55f),cam.transform.eulerAngles.y,cam.transform.eulerAngles.z); // camrotate means a vector and cam is the camera
        cam.transform.eulerAngles= temporaryangle;

}

通过在比较之前添加偏移量(例如180f),然后在以下步骤之后删除偏移量,可以将比较移动到不涉及0/360处环绕的范围:

var tmpOffset = 180f;

var clampedX = cam.transform.eulerAngles.x + tmpOffset;
clampedX = Mathf.Clamp(clampedX, tmpOffset - 24f, tmpOffset + 55f);
clampedX -= tmpOffset; // return to the correct value

temporaryangle = new Vector3 (clampedX, cam.transform.eulerAngles.y, cam.transform.eulerAngles.z); // camrotate means a vector and cam is the camera

您确定必须使用
camrotate.x
而不是
camrotate.y
?@Hristo y用于左/右旋转。所以我不想限制它,我知道,您使用的是
cam.transform.position
,但您可能想要
cam.transform.rotation
?@hr抱歉,我复制了错误的代码。这是决赛one@Hrist看看你能不能帮忙。对不起,我之前的代码fyi,当旋转低于0时,它跳到55f的原因是Unity将映射一个负的值-1到359度等,这当然大于您的最大55f,因此将限制它。