簡體   English   中英

Unity2D 旋轉問題

[英]Unity2D rotation issue

我想在我的游戲中添加一個降落傘,我需要它向右旋轉 45 度,然后向左旋轉 45 度並保持交替,下面是我需要如何工作的圖表

在此處輸入圖片說明

我正在使用的代碼如下,但它只在 1 側工作,然后不會返回。

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

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

我現在意識到這個答案的先前版本是不必要的復雜,但現在我不能刪除它,因為它被接受了。 問題只是由拼寫錯誤引起的。

您的代碼可以簡化很多。 您實際上不需要布爾值來查看您是否正確。 只需在第一個如果,不需要第二個。 此外,您很有可能會減少可能出現的錯誤量,就像這里您的布爾值並不總是您認為的那樣。

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

我能夠通過這樣做來解決它

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM