我需要让一个循环在迭代到下一个循环之前等待一段时间
本文关键字:循环 迭代 下一个 一段时间 等待 一个 | 更新日期: 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++;
}
}
}