void Start()
{
StartCoroutine(Message(i));
StartCoroutine(Message(i));
StartCoroutine(Message(i));
StartCoroutine(Message(i));
}
我不認爲這是做你認爲應該的。這將不會等待每個StartCoroutine
完成並將調用下一個StartCoroutine
。
這是發生了什麼:
第一StartCoroutine(Message(i));
通話將啓動Message
功能。 一旦它符合yield return new WaitForSeconds(waitTime = 2f);
代碼行,它將跳回Start()
函數。
下一個StartCoroutine(Message(i));
將被調用,那麼同樣的事情會再次發生。
當調用從非協程功能的協程功能,只要你有yield return new WaitForSeconds
,yield return null;
或yield return
什麼有史以來YieldInstruction
實施後,執行將返回到,其中非協程功能StartCoroutine
函數被調用來自並繼續執行其他代碼。
要使協程等待另一個完成,請從另一個協同程序函數調用StartCoroutine(Message(i));
函數。這將允許你對每個協程函數調用yield
。這被稱爲鏈式協程。
若要鏈接或yield
一個協同函數調用,只需在StartCoroutine
函數前面放置yield return
即可。現在yield return StartCoroutine(Message(i));
public class Wait : MonoBehaviour {
private int i = 0;
public string[] message;
[SerializeField]
private Text toText;
public IEnumerator Message(float waitTime)
{
// toText.text = message[i];
i++;
yield return new WaitForSeconds(waitTime = 2f);
}
void Start()
{
StartCoroutine(startMessage());
}
IEnumerator startMessage()
{
yield return StartCoroutine(Message(i));//Wait until this coroutine function retuns
yield return StartCoroutine(Message(i));//Wait until this coroutine function retuns
yield return StartCoroutine(Message(i));//Wait until this coroutine function retuns
yield return StartCoroutine(Message(i));//Wait until this coroutine function retuns
}
}
,每個StartCoroutine(Message(i));
通話將等到第一個完成。您可以始終使用boolean
變量來執行此操作,但它對yield
調用StartCoroutine
要好得多。
關鍵字使得您的方法被延遲執行。因此只有在調用'Enumerator.MoveNext()'時纔會執行它,這是你永遠不會調用的(例如使用for循環)。 – HimBromBeere
@HimBromBeere是不是'StartCoroutine'的工作? –