Unity 2D - 旋转对象并限制旋转



我正在尝试做一个前后旋转的大炮。 我想将旋转限制在 -55 到 55(我的意思是 transform.position.z(,但我无法让它工作。

目前我的代码是:

public class Cannon : MonoBehaviour
{
bool hit = false;
void Update ()
{
float angle = transform.rotation.z;
if (angle > -55 & angle < 55 & !hit)
{
transform.Rotate(Vector3.back * Time.deltaTime);
}
if (angle <= -55)
{
transform.Rotate(Vector3.back * Time.deltaTime);
hit = true;
}
if (angle >= 55)
{
transform.Rotate(Vector3.forward * Time.deltaTime);
hit = true;
}
}
}

唯一有效的是我为物体开始旋转所做的第一次旋转,所以它只是向后旋转并且不会停止,它似乎忽略了"角度">

我还尝试将最后 2 个 If 语句放在第一个语句中,但仍然不起作用。

我想让它旋转直到它达到-55,然后开始旋转直到它达到 +55 并重复此操作。

您需要做的第一件事是使用欧拉角而不是四分之一角来查找以度为单位的旋转。

然后,由于它不报告负角度,而是报告从 0 到 360 的角度,因此您需要在大于 360 时减去 180 以获得负角度等效值。

从那里,您可以应用测试以使其保持在范围内:

public class Cannon : MonoBehaviour {
public float direction = 1f; // initial direction
public float speed = 20f; // speed of rotation
void Update ()
{
float angle = transform.eulerAngles.z;
if (angle > 180f) angle -= 360f;
if ((angle < -55f) || (angle > 55f)) direction *= -1f; // reverse direction (toggles between 1 & -1)
transform.Rotate (0, 0, speed * direction * Time.deltaTime);
}
}

最新更新