我有一個代碼(C#)與更新功能,需要等待幾秒鐘的某個點。問題在於,在執行等待命令時,會繼續執行更新功能,導致應該延遲的位被完全跳過。 由於布爾變量更新只會做這個東西一次,直到我再次可用,所以這是沒有問題的。 這段代碼沒有完全等待,所以不用擔心,我忽略了大多數不需要等待的行。Unity:等待()在更新幾乎工作(但不完全)
void Update()
{
if (RoundOver == false)
{
RoundOver = true;
Seconds = 3;
Debug.Log("Waiting", gameObject);
StartCoroutine(Wait());
if (Continue)
{
Continue = false;
Debug.Log("Done Waiting", gameObject);
RoundNumber += 1; //Just game stuff
ZombiesLeft = ZombieAmount(); //Just game stuff
RoundOver = false;
}
Debug.Log("Done wit stuff", gameObject);
}
if (counter > DelayTime && RoundOver == false)
{
counter = 0;
Debug.Log("Going to spawn a zombie", gameObject);
SpawnZombie();
}
counter += Time.deltaTime;
}
與萊等待功能:
IEnumerator Wait()
{
Debug.Log("ACTUALLY WAITING", gameObject);
yield return new WaitForSeconds(Seconds);
Continue = true;
Debug.Log("ACTUALLY WAITING DONE", gameObject);
}
輸出如下:
Waiting
ACTUALLY WAITING
Done wit stuff
ACTUALLY WAITING DONE
所以很明顯正確的順序應該是
Waiting
ACTUALLY WAITING
ACTUALLY WAITING DONE
Done wit stuff
編輯: 的阻止我當滿足(這裏是隱藏的)要求時,if (continue)
應該激活第二個塊。第二塊將繼續做它的事情,直到它完成(可能需要幾分鐘),然後再次設置RoundOver
爲重新啓用第一個塊。第一個塊基本上是繼續重新運行第二個塊,並增加像RoundNumber +=1
這樣的變量,這是唯一的問題,第二個塊間隔3秒。
我已經回答了你的問題,但是如果你告訴我們你想做什麼,因爲我懷疑它不應該進入更新功能 –
更新它在編輯 – RnRoger
你可以通過循環模擬更新與枚舉器並以「WaitForEndOfFrame」結束。所以在你的Start()方法中放入StartCoroutine(IEnumeratorUpdate());然後將您的等待邏輯放在需要代碼的地方! – Maakep