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

时间:2017-07-08 10:57:23

标签: rotation unity2d

我试图做一个前后旋转的旋转大炮。 我想将旋转从-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;
        }
    }
}

唯一有效的想法就是我为对象开始旋转所做的第一次旋转,所以它只是旋转回来而不停止,它似乎忽略了角度&#34;角度& #34;

我还尝试将最后两个If语句放在第一个语句中,但仍然无效。

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

1 个答案:

答案 0 :(得分:1)

您需要做的第一件事是使用Euler Angles而不是Quarternions来查找度数的旋转。

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

从那里你可以应用你的测试来保持它的界限:

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