C# 有人能帮我用Mathf.Clamp-in Unity设置摄像机旋转限制吗?

C# 有人能帮我用Mathf.Clamp-in Unity设置摄像机旋转限制吗?,c#,unity3d,rotation,clamp,C#,Unity3d,Rotation,Clamp,我一直在遵循《行动中的统一》一书,但我遇到了第一人称相机垂直旋转代码的问题 sensitivityVert = 9.0f; public float minimumVert = -45.0f; public float maximumVert = 45.0f; private float _rotationX = 0; void Update() { _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;

我一直在遵循《行动中的统一》一书,但我遇到了第一人称相机垂直旋转代码的问题

sensitivityVert = 9.0f;

public float minimumVert = -45.0f;
public float maximumVert = 45.0f;
private float _rotationX = 0;

void Update()
{
   _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
   _rotationX = Mathf.Clamp(_rotationX, minimumVert, maximumVert);

   float rotationY = transform.localEulerAngles.y;
   transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
}
问题在于,不是限制相机可以移动的位置,而是根据提供的2个值将相机冻结在某个位置,而不根据鼠标输入执行任何操作


有人知道如何解决这个问题吗?

你需要重写Euler角的夹具,因为当你从变换中得到一个角度时,你总是得到一个正角度

public static float RestrictAngle(float angle, float angleMin, float angleMax)
{
    if (angle > 180)
        angle -= 360;
    else if (angle < -180)
        angle += 360;

    if (angle > angleMax)
        angle = angleMax;
    if (angle < angleMin)
        angle = angleMin;
    return angle;
}
公共静态浮动限制角度(浮动角度、最小浮动角度、最大浮动角度)
{
如果(角度>180)
角度-=360;
否则,如果(角度<-180)
角度+=360;
如果(角度>角度最大值)
角度=角度最大值;
如果(角度<角度最小值)
角度=最小角度;
返回角;
}

非常感谢您的回答!不幸的是,同样的事情也发生了,但我发现无论出于什么原因,我的检查器都将脚本的最小值和最大值都覆盖为45,这导致它被卡住了。