1

我一直在关注 Unity in Action 这本书,但我遇到了第一人称相机垂直旋转代码的问题。

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);
}

问题在于,Clamp 没有限制相机可以移动的位置,而是根据提供的 2 个值将相机冻结在某个位置,并且不会根据鼠标输入执行任何操作。

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

4

1 回答 1

1

你需要重写欧拉角的钳位,因为当你从变换中得到一个角度时,你总是得到一个正角。

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;
}
于 2020-06-28T11:14:19.480 回答