一連のコルーチン


9

次々と実行される一連のコルーチン呼び出しを積み重ねるにはどうすればよいですか?

コルーチンで一連のカラーlerpsをループする点滅するカラーエフェクトを取得しようとしましたが、機能しません。

回答:


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;
  }
}

使用例:

IEnumerator PrintCoroutine(string arg)
{
  yield return new WaitForSeconds(0.3f);
}

StartCoroutine(Sequence(PrintCoroutine("foo"), PrintCoroutine("bar")));

素晴らしい汎用ソリューション。
認知症のハリネズミ

7

特異なバグが説明するものに加えて、ユニティマニュアルが明らかになりませんので、何かは、あなたができることですオブジェクト、あなたから受け取ったコール。yield returnCoroutineStartCoroutine

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ビデオをご覧ください。


両方(これと以下)のインスナーは素晴らしいです。従来のOOPでコードの透過性についてもっと気にかけているのであれば、このアプローチを採用します。ただし、データ駆動型の開発を行っている場合、@ Heisenbugソリューションの方が役立ちます。
IndieForger 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.