我有一个非常基本的脚本,可以将相机从鼠标位置移开,但是我想将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);
}


但是我认为它并不能满足您的需求。鼠标位置以窗口坐标给出,因此您永远不会有负值。您可能需要先平移坐标,如下所示:

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

07-24 09:16