Відповіді:
public static IEnumerator Sequence(params IEnumerator[] sequence)
{
for(int i = 0 ; i < sequence.Length; ++i)
{
while(sequence[i].MoveNext())
yield return sequence[i].Current;
}
}
приклад використання:
IEnumerator PrintCoroutine(string arg)
{
yield return new WaitForSeconds(0.3f);
}
StartCoroutine(Sequence(PrintCoroutine("foo"), PrintCoroutine("bar")));
На додаток до того , що описано гайзенбаґ, то , що керівництво Unity робить очевидним є те, що ви можете об'єкт, який ви отримуєте від виклику.yield return
Coroutine
StartCoroutine
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);
}
Іноді це робить для кращого читання, ніж цикл MoveNext, але має недолік, що ви не можете перешкодити дочірній програмі виконувати логіку в самому верхньому циклі кореневих програм, що може бути корисним для побудови більш складних методів управління потоком поверх IEnumerator.
Більше про це, вам слід переглянути це відео Unite, яке висвітлює можливість отримання більше результатів, не будуючи власного планувальника програм.