Serilerdeki coutinler


9

Birbiri ardına yapılması gereken bir dizi Coroutine çağrısını üst üste nasıl koyabilirim?

Ben bir coroutine renk lerps bir dizi döngü yanıp sönen bir renk efekti elde denedim ama çalışmıyor.

Yanıtlar:


7
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")));

Güzel genel amaçlı çözüm.
demented hedgehog

7

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 returnbir Coroutinenesneyi 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.


Hem (bu hem de aşağıda) asnwers harika. Geleneksel OOP kod şeffaflığı hakkında daha fazla önemsiyorsanız bu yaklaşım ile gitmek istiyorum. Ancak veri odaklı geliştirme yapıyorsanız @Heisenbug çözümü size daha iyi hizmet verecektir.
IndieForger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.