Jawaban:
public static IEnumerator Sequence(params IEnumerator[] sequence)
{
for(int i = 0 ; i < sequence.Length; ++i)
{
while(sequence[i].MoveNext())
yield return sequence[i].Current;
}
}
contoh penggunaan:
IEnumerator PrintCoroutine(string arg)
{
yield return new WaitForSeconds(0.3f);
}
StartCoroutine(Sequence(PrintCoroutine("foo"), PrintCoroutine("bar")));
Selain apa yang dijelaskan Heisenbug, sesuatu yang manual Unity tidak membuat jelas adalah bahwa Anda dapat yield return
suatu Coroutine
objek, yang Anda terima dari sebuah StartCoroutine
panggilan.
public IEnumerator RunColorCoroutineLoop()
{
while (true) {
yield return StartCoroutine(FirstColorCoroutine());
yield return StartCoroutine(SecondColorCoroutine());
yield return StartCoroutine(ThirdColorCoroutine());
yield return StartCoroutine(FourthColorCoroutine());
}
}
public IEnumerator FirstColorCoroutine()
{
SetColor("color1");
yield return new WaitForSeconds(1f);
}
public IEnumerator SecondColorCoroutine()
{
SetColor("color2");
yield return new WaitForSeconds(1f);
}
public IEnumerator ThirdColorCoroutine()
{
SetColor("color3");
yield return new WaitForSeconds(1f);
}
public IEnumerator FourthColorCoroutine()
{
SetColor("color4");
yield return new WaitForSeconds(1f);
}
Ini kadang-kadang membuat pembacaan yang lebih baik daripada loop MoveNext, tetapi memiliki kelemahan bahwa Anda tidak dapat mencegah coroutine anak berjalan melalui logika dalam loop coroutine teratas, yang dapat berguna untuk membangun teknik kontrol aliran yang lebih canggih di atas IEnumerator.
Untuk lebih lanjut tentang ini, Anda harus melihat video Unite ini yang mencakup mendapatkan lebih banyak dari coroutine Anda tanpa membangun penjadwal coroutine Anda sendiri.