我需要让一个循环在迭代到下一个循环之前等待一段时间

本文关键字:循环 迭代 下一个 一段时间 等待 一个 | 更新日期: 2023-09-27 18:17:30

我目前的代码是完全崩溃的游戏:

public void fire(float angle)
{
    int burst = 0;
    bool waitActice = false;
    while(burst < 3){
            if (waitActive == false) {
                    Debug.Log("Created " + burst + " burst");
                    StartCoroutine (wait (5f));
                    Debug.Log ("done waiting");
                    burst++;
            }
    }
}
IEnumerator wait(float time)
{
    Debug.Log ("Now waiting");
    waitActive = true;
    yield return new WaitForSeconds(time);
    waitActive = false;
}

我用for循环尝试了同样的事情,但是for循环将继续迭代,直到它全部完成。我想创建3次爆发,每次爆发之间间隔5秒,但当fire函数被调用时,它崩溃了。什么好主意吗?

我需要让一个循环在迭代到下一个循环之前等待一段时间

我的猜测是,你有一个waitActive作为一个字段在你的类,但你隐藏它与本地bool waitaction = false;

我猜这是因为你的wait指的是waitActive。

你可以试试:

public IEnumerator fire(float angle)
{
    int burst = 0;
    while(burst < 3){
        Debug.Log("Created " + burst + " burst");
        yield return new WaitForSeconds(time);
        Debug.Log ("done waiting");
        burst++;
    }
}

那么做

StartCoroutine(fire(9.2));

创建变量LastFireTime

设为0,在更新函数中保持递增

LastFireTime += Time.deltaTime;

这样你就知道距离上次点火有多长时间了,并且每次再次点火时你都可以将其重置为0。

不要等待游戏更新功能必须尽快返回

为什么不线程呢?睡眠?

      Thread thread = new Thread(() => fire(angle)); // this will execute your method in a new thread.
      thread.Start();

public void fire(float angle)
         {
          int burst = 0;
          bool waitActice = false;
          while(burst < 3){
          if (waitActive == false) {
                Thread.Sleep(5000); // will wait for 5 seconds
                Debug.Log("Created " + burst + " burst");
                StartCoroutine (wait (5f));
                Debug.Log ("done waiting");
                burst++;
          }
        }
     }