Yanıtlar:
public static IEnumerator Sequence(params IEnumerator[] sequence)
{
for(int i = 0 ; i < sequence.Length; ++i)
{
while(sequence[i].MoveNext())
yield return sequence[i].Current;
}
}
kullanım örneği:
IEnumerator PrintCoroutine(string arg)
{
yield return new WaitForSeconds(0.3f);
}
StartCoroutine(Sequence(PrintCoroutine("foo"), PrintCoroutine("bar")));
Heisenbug'un açıkladığı şeye ek olarak, Birlik kılavuzunun açıkça belirtmediği bir şey, bir çağrıdan aldığınız yield return
bir Coroutine
nesneyi yapabilmenizdir 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);
}
Bu bazen bir MoveNext döngüsüne göre daha iyi okuma yapar, ancak çocuk koroutinin, IEnumerator'ın üstünde daha sofistike akış kontrol teknikleri oluşturmak için yararlı olabilecek en üst koroutin döngü içinde mantık yoluyla çalışmasını engelleyemeyeceğiniz dezavantaja sahiptir.
Bununla ilgili daha fazla bilgi için , kendi coroutine zamanlayıcınızı oluşturmadan cohoutine'lerinizden daha fazla yararlanmayı kapsayan bu Unite videosuna bakmalısınız.