Unity协程不起作用

问题描述:

我不认为我完全理解协程,它不按我想要的方式工作,所以我需要帮助。Unity协程不起作用

我有一个记忆游戏(Simon喜欢),它由4个随机打开和关闭的方块组成。在方形开关打开/关闭之后,应该稍微休息一下,然后切换下一个按钮,而我的程序似乎没有这样做。对于切换过程中,我使用闪烁* Colorname协程这是继:

foreach (int color in pattern) 
{ 
     switch (color) 
     { 
      case 0: 
       StartCoroutine (blinkGreen (blinkSeconds)); 
       break; 
      case 1: 
       StartCoroutine (blinkRed (blinkSeconds)); 
       break; 
      default: 
       break; 
     } 
} 
//to do: pause function between button blinks 

IEnumerator blinkGreen (float seconds) 
{ 
     greenImg.color = Color.white; 
     yield return new WaitForSeconds (seconds); 
     greenImg.color = Color.green; 
} 

我一直在使用waitforseconds试图在2个地方来实现我的目标:首先,在闪烁*颜色如下:

IEnumerator blinkGreen (float seconds) 
{ 
    greenImg.color = Color.white; 
    yield return new WaitForSeconds (seconds); 
    greenImg.color = Color.green; 
    yield return new WaitForSeconds (seconds); 
} 

其次,在循环后,下//做:按钮闪烁之间暂停功能,通过调用另一个协程:

 StartCoroutine(waitfornexttransition(5.0f)); 

    IEnumerator waitfornexttransition (float second) 
    { 
     yield return new WaitForSeconds (second); 
    } 

我缺少的东西?所有的建议和帮助表示赞赏。谢谢!

Unity不会等待已启动协程的完成以继续执行代码。如果输入(伪代码):

print "1" 
start coroutine that prints "2" after a second 
print "3" 

输出将是:“1”,“3”,“2”。

如果你把所有的代码放在一个协程中,所有的东西都按照预期顺序运行。

好吧,因为无论如何它们都在foreach循环中,并且每次迭代都会启动一个新的couroutine,那么基本上所有的协同程序都将在同一帧内同时启动。无论代码的其他部分如何,它们都将同时运行,同时闪烁所有灯光。

如果您希望您的代码等待一定的执行之间的时间,然后做一个计时器,只有闪烁的灯光时,定时器0命中一个基本的例子是:

private float timer; 

void Start() 
{ 
    timer = 2f; // Waiting 2 seconds between blinks 
} 

void Update() 
{ 
    timer -= Time.deltaTime; // Consistently decrement timer independently of frame rate 

    if (timer <= 0) 
    { 
     blinkLight(); 
     timer = 2f; 
    } 
} 

void blinkLight() 
{ 
    // Light blinking logic goes here. 
}