Unity C#协同程序不起作用

Unity C#协同程序不起作用,c#,unity3d,C#,Unity3d,我想做一个西蒙游戏。显然,当显示一种颜色时,它应该等待一秒钟左右。当游戏向你展示该做什么时,我创建了一个coruotine。在协同程序中,它应该先暂停,当我运行游戏时,它会暂停。然后它通过选择一种颜色和其他东西。然后它应该循环(我做了一个循环)并再次暂停,然后再做所有事情。问题是,暂停只在第一次起作用。然后,它会显示其他颜色半秒钟,然后结束。我不明白为什么一旦它循环起来,除了暂停,它似乎什么都做了。这是我的密码: void Update () { if (show == true) {

我想做一个西蒙游戏。显然,当显示一种颜色时,它应该等待一秒钟左右。当游戏向你展示该做什么时,我创建了一个coruotine。在协同程序中,它应该先暂停,当我运行游戏时,它会暂停。然后它通过选择一种颜色和其他东西。然后它应该循环(我做了一个循环)并再次暂停,然后再做所有事情。问题是,暂停只在第一次起作用。然后,它会显示其他颜色半秒钟,然后结束。我不明白为什么一旦它循环起来,除了暂停,它似乎什么都做了。这是我的密码:

void Update () {
    if (show == true) {
        StartCoroutine(Show());
    }
}

IEnumerator Show() {
    do {
        yield return new WaitForSeconds(2f);
        round ++;

        if (round == 1) {
            on = Random.Range(1,5);
        }

        if (round == 2) {
            on = Random.Range(1,5);
        }

        if (round == 3) {
            on = Random.Range(1,5);
        }

        if (round == 4) {
            on = Random.Range(1,5);
        }

        // Turn on/off lights
        if (on == 1) {
            green.GetComponent<Renderer>().material = greenMat;
        }
        if (on != 1) {
            green.GetComponent<Renderer>().material = greenOff;
        }
        if (on == 2) {
            red.GetComponent<Renderer>().material = redMat;
        }
        if (on != 2) {
            red.GetComponent<Renderer>().material = redOff;
        }
        if (on == 3) {
            yellow.GetComponent<Renderer>().material = yellowMat;
        }
        if (on != 3) {
            yellow.GetComponent<Renderer>().material = yellowOff;
        }
        if (on == 4) {
            blue.GetComponent<Renderer>().material = blueMat;
        }
        if (on != 4) {
            blue.GetComponent<Renderer>().material = blueOff;
        }
    }while(show == true);
}
void更新(){
if(show==true){
开始例行程序(Show());
}
}
IEnumerator Show(){
做{
产生返回新的WaitForSeconds(2f);
round++;
如果(四舍五入==1){
on=随机范围(1,5);
}
如果(四舍五入==2){
on=随机范围(1,5);
}
如果(四舍五入==3){
on=随机范围(1,5);
}
如果(四舍五入==4){
on=随机范围(1,5);
}
//打开/关闭灯
如果(on==1){
green.GetComponent().material=greenMat;
}
如果(打开!=1){
green.GetComponent().material=greenOff;
}
如果(on==2){
red.GetComponent().material=redMat;
}
如果(打开!=2){
red.GetComponent().material=redOff;
}
如果(开==3){
yellow.GetComponent().material=yellowMat;
}
如果(打开!=3){
黄色。GetComponent().material=yellowOff;
}
如果(开==4){
blue.GetComponent().material=blueMat;
}
如果(打开!=4){
blue.GetComponent().material=blueOff;
}
}while(show==true);
}

我写了一个可能对你有帮助的合作计划。把它打开

    IEnumerator Show()
{
    while (true) // or show 
    {
        yield return new WaitForSeconds(2f);

        round ++;
        if (round >= 1 && round <= 4) 
            on = Random.Range(1,5);

        green.GetComponent<Renderer>().material = on == 1 ? greenMat : greenOff;

        //Same for the other...
    }
}
IEnumerator Show()
{
while(true)//或show
{
产生返回新的WaitForSeconds(2f);
round++;

如果(round>=1&&round很难理解你的问题和你的问题。我建议你重新表述你的问题,说出你想做什么,然后告诉我们现在发生了什么。此外,在你的其他问题中不接受有用的答案会阻止人们帮助你。