코 루틴 시리즈


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

좋은 범용 솔루션.
demented hedgehog

7

Heisenbug 설명 것뿐만 아니라, 유니티 설명서가 분명하지 않는 일이 당신이 할 수 있다는 것입니다 객체, 당신은에서받는 전화.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 루프보다 더 나은 판독을 제공하지만 최상위 coroutine 루프 내에서 로직을 통해 자식 coroutine이 실행되는 것을 막을 수 없다는 단점이 있습니다. 이는 IEnumerator 위에보다 정교한 흐름 제어 기술을 구성하는 데 유용 할 수 있습니다.

이에 대한 자세한 내용은 자신의 코 루틴 스케줄러를 구축하지 않고 코 루틴을 최대한 활용하는 이 Unite 비디오 를 참조하십시오.


(이와 아래) 둘 다 훌륭합니다. 전통적인 OOP의 코드 투명성에 대해 더 관심이 있다면이 접근법을 사용해야합니다. 그러나 데이터 중심 개발 @Heisenbug 솔루션을 수행하면 더 나은 서비스를 제공 할 수 있습니다.
IndieForger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.