如何在 unity 5 中限制鼠标输入的旋转?

How to constrain rotation from mouse input in unity 5?

我有一个非常基本的脚本可以将相机从鼠标位置移开,但我想将 z 轴的旋转限制为某些值。使用下面的代码一切正常,但相机可以在 z 轴上完全旋转,我想将其限制为 20 和 -40。我曾尝试使用 mathf.clamp,但这没有用,当打印到控制台时,它只打印出 mathf.clamp 中最右边的值。我还尝试使用 if 语句来查看旋转是否超过限制,如果超过则重置它。但都没有用...我也查看了 Unity 的答案,但我不明白任何其他答案,有人可以告诉我该怎么做吗?

代码:

void Update () {
        transform.rotation = Quaternion.Euler(0f, Input.mousePosition.x, Input.mousePosition.y);
    }

这就是夹紧它的方式。

void Update()
{
    float zRotation = Mathf.Clamp(Input.mousePosition.y, -40, 20);
    transform.rotation = Quaternion.Euler(0f, Input.mousePosition.x, zRotation);
}

但我不认为它符合您的要求。鼠标位置以 window 坐标给出,因此您永远不会有负值。您可能需要先转换坐标,如下所示:

void Update()
{
    float yRotation = (Input.mousePosition.x - Screen.width / 2) * 360 / Screen.width;
    float zRotation = (Input.mousePosition.y - Screen.height / 2) * 180 / Screen.height;
    zRotation = Mathf.Clamp(zRotation, -40, 20);
    transform.rotation = Quaternion.Euler(0f, yRotation, zRotation);
}