Как бы я мог составить последовательность вызовов Coroutine, которые должны выполняться один за другим?
Я пытался получить мигающий цветовой эффект, зацикливая серию цветовых эффектов в сопрограмме, но это не работает.
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
вызова.Это иногда делает чтение лучше, чем цикл MoveNext, но имеет недостаток, заключающийся в том, что вы не можете предотвратить выполнение дочерней сопрограммы с помощью логики в самом верхнем цикле сопрограммы, что может быть полезно для создания более сложных методов управления потоком поверх IEnumerator.
Более подробно об этом вы можете посмотреть в этом видео Unite, в котором рассказывается о том, как получить больше от своих сопрограмм без создания собственного планировщика сопрограмм.
источник