Unity Mathf.clamp没有按预期工作?

时间:2017-04-29 10:45:45

标签: c# unity3d

我正在制作第一人称射击游戏,我想限制相机旋转。我已经使用Math.clamp来夹住角度,但是在角度达到0之后它会夹到最大角度。它应该不会夹到-24f。我该如何解决这个问题。

 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;

}

1 个答案:

答案 0 :(得分:1)

您可以通过在比较之前添加偏移量(比如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