Unity C#协同程序不起作用
我想做一个西蒙游戏。显然,当显示一种颜色时,它应该等待一秒钟左右。当游戏向你展示该做什么时,我创建了一个coruotine。在协同程序中,它应该先暂停,当我运行游戏时,它会暂停。然后它通过选择一种颜色和其他东西。然后它应该循环(我做了一个循环)并再次暂停,然后再做所有事情。问题是,暂停只在第一次起作用。然后,它会显示其他颜色半秒钟,然后结束。我不明白为什么一旦它循环起来,除了暂停,它似乎什么都做了。这是我的密码:Unity C#协同程序不起作用,c#,unity3d,C#,Unity3d,我想做一个西蒙游戏。显然,当显示一种颜色时,它应该等待一秒钟左右。当游戏向你展示该做什么时,我创建了一个coruotine。在协同程序中,它应该先暂停,当我运行游戏时,它会暂停。然后它通过选择一种颜色和其他东西。然后它应该循环(我做了一个循环)并再次暂停,然后再做所有事情。问题是,暂停只在第一次起作用。然后,它会显示其他颜色半秒钟,然后结束。我不明白为什么一旦它循环起来,除了暂停,它似乎什么都做了。这是我的密码: void Update () { if (show == true) {
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很难理解你的问题和你的问题。我建议你重新表述你的问题,说出你想做什么,然后告诉我们现在发生了什么。此外,在你的其他问题中不接受有用的答案会阻止人们帮助你。