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

时间:2014-08-11 09:26:17

标签: c# loops unity3d

我当前的代码完全崩溃了游戏:

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函数时,它会崩溃。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

为什么不是thread.sleep?

      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++;
          }
        }
     }

答案 1 :(得分:1)

创建变量LastFireTime

将其设为0, 在更新功能中继续增加它。

LastFireTime += Time.deltaTime;

这样你就知道自上次火灾以来有多少时间,你可以在每次再次射击时将其重置为0.

请勿等待,因为游戏更新功能必须尽快返回

答案 2 :(得分:1)

我的猜测是你的班级中有一个waitActive作为一个字段,但你用你的本地bool waitActice = false隐藏它;。

我想这是因为你的等待是指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));