Unity2D旋转问题

Unity2D rotation issue

我想在我的游戏中添加一个降落伞,我需要它向右旋转 45 度然后向左旋转 45 度并保持交替,下面是我需要如何工作的图表

我使用的代码如下,但是它只在一侧有效,然后就不会返回。

        if (maxRotation <= transform.rotation.eulerAngles.z)
        {
            rotatingRight = false;
        }else if(minRotation <= transform.rotation.eulerAngles.z)
        {
            rotatingRight = true;
        }

        transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);

        if (rotatingRight)
        {
            transform.Rotate(Vector3.forward * 45 * Time.deltaTime);
        }
        else
        {
            transform.Rotate(Vector3.forward * -45 * Time.deltaTime);
        }

您的代码可以简化很多。您实际上不需要布尔值来查看您是否走对了。在第一个 if 中执行即可,不需要第二个。此外,您很有可能会像此处那样减少可能会出现的错误数量,因为您的布尔值并不总是您认为的那样。

float rotationValue = 45;

if(transform.rotation.eulerAngles.z >= maxRotation)
{
    rotationValue = -45;
}
else if(transform.rotation.eulerAngles.z <= minRotation)
{
    rotationValue = -45;
}

transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);


transform.Rotate(Vector3.forward, rotationValue * Time.deltaTime);

正如3Dave在评论中所说,当minRotation大于或等于eulerAngles时,您应该向右旋转。

if (maxRotation <= transform.rotation.eulerAngles.z)
{
    rotatingRight = false;
} else if (transform.rotation.eulerAngles.z <= minRotation)
{
    rotatingRight = true;
}

transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);

if (rotatingRight)
{
    transform.Rotate(Vector3.forward * 45 * Time.deltaTime);
}
else
{
    transform.Rotate(Vector3.forward * -45 * Time.deltaTime);
}

我现在意识到这个答案的前一个版本不必要地令人费解,但现在它被接受了,我不能删除它。这个问题只是一个打字错误造成的。

我通过这样做解决了这个问题

        if (maxRotation == Math.Round(transform.rotation.eulerAngles.z))
        {
            rotatingRight = false;
        }else if(minRotation == Math.Round(transform.rotation.eulerAngles.z))
        {
            rotatingRight = true;
        }

        transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);

        if (rotatingRight)
        {
            transform.Rotate(Vector3.forward * rotationSpeed * Time.deltaTime);
        }
        else
        {
            transform.Rotate(Vector3.back * rotationSpeed * Time.deltaTime);
        }