我当前的代码完全崩溃了游戏:
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函数时,它会崩溃。有什么想法吗?
答案 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));