如何在 while 循环中无限循环数字? (Unity3D-unityscript)
How to infinite loop numbers in while loops? (Unity3D- unityscript)
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 循环,但请在下面尝试。每次单击时,旋转次数都会增加并且精灵会发生变化,直到 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;
}
}
问题是您在 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;
}
}
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 循环,但请在下面尝试。每次单击时,旋转次数都会增加并且精灵会发生变化,直到 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;
}
}
问题是您在 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;
}
}