【问题标题】:How to infinite loop numbers in while loops? (Unity3D- unityscript)如何在while循环中无限循环数? (Unity3D-统一脚本)
【发布时间】:2015-04-27 04:27:53
【问题描述】:
function OnMouseDown () {
    rotationNumber +=1;
}

function Update () {
    while (rotationNumber == 1) {
        gameObject.GetComponent(SpriteRenderer).sprite = leftArrow;
        return;
    } 
    while (rotationNumber == 2) {
        gameObject.GetComponent(SpriteRenderer).sprite = upArrow;
        return;
    }
    while (rotationNumber == 3) {
        gameObject.GetComponent(SpriteRenderer).sprite = rightArrow;
        return;
    }
    while (rotationNumber == 4) {
        gameObject.GetComponent(SpriteRenderer).sprite = upArrow;
        rotationNumber = 1;
        return;
    }
}

我想循环播放,但是当我第四次单击它时,它直接转到第一张图片。我尝试了 yield WaitForSeconds 但它没有用。

【问题讨论】:

  • 你为什么使用while循环而不是switch case?

标签: loops unity3d scripting while-loop unityscript


【解决方案1】:

问题是您在 while 循环内将 rotationNumber 设置为 1。这样做:

function OnMouseDown () {
    rotationNumber += 1;
    if ( rotationNumber > 4 ) rotationNumber = 1;
}

function Update () {
    while (rotationNumber == 1) {
        gameObject.GetComponent(SpriteRenderer).sprite = leftArrow;
        return;
    } 
    while (rotationNumber == 2) {
        gameObject.GetComponent(SpriteRenderer).sprite = upArrow;
        return;
    }
    while (rotationNumber == 3) {
        gameObject.GetComponent(SpriteRenderer).sprite = rightArrow;
        return;
    }
    while (rotationNumber == 4) {
        gameObject.GetComponent(SpriteRenderer).sprite = upArrow;
        return;
    }
}

【讨论】:

    【解决方案2】:

    我不太确定您为什么在更新循环中使用 while 循环,但请在下面尝试。每次单击时,旋转数都会增加,并且精灵会更改,直到 rotationNumber 变量> 4,在这种情况下,它将变量重置为 1

    function Update()
    {
        if(rotationNumber == 1)
        {
             gameObject.GetComponent(SpriteRenderer).sprite = leftArrow;
        }else if(rotationNumber ==2)
        {
             gameObject.GetComponent(SpriteRenderer).sprite = upArrow;  
        }else if(rotationNumber ==3)
        {
             gameObject.GetComponent(SpriteRenderer).sprite = rightArrow;
        }else if(rotationNumber == 4)
        {
            gameObject.GetComponent(SpriteRenderer).sprite = upArrow;  
        }else if(rotationNumber > 4)
        {
            rotationNumber = 1;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 2014-03-29
      • 2012-12-24
      • 1970-01-01
      • 2013-02-22
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      相关资源
      最近更新 更多