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