Quân đoàn trong loạt


9

Làm thế nào tôi có thể sắp xếp một loạt các cuộc gọi Coroutine nên được thực hiện lần lượt?

Tôi đã thử nhận được hiệu ứng màu nhấp nháy lặp lại một loạt các lerps màu trong coroutine nhưng nó không hoạt động.

Câu trả lời:


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

ví dụ sử dụng:

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

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

Giải pháp mục đích chung đẹp.
con nhím mất trí

7

Ngoài những gì Heisenorms đã mô tả, một điều mà hướng dẫn sử dụng Unity không thể hiện rõ là bạn có thể yield returnlà một Coroutineđối tượng mà bạn nhận được từ một StartCoroutinecuộc gọi.

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

Điều này đôi khi giúp đọc tốt hơn vòng lặp MoveNext, nhưng có nhược điểm là bạn không thể ngăn coroutine con chạy qua logic trong vòng lặp coroutine trên cùng, có thể hữu ích cho việc xây dựng các kỹ thuật kiểm soát dòng tinh vi hơn trên IEnumerator.

Để biết thêm về điều này, bạn nên xem video Unite này bao gồm việc khai thác nhiều hơn từ các coroutines của bạn mà không cần xây dựng lịch trình coroutine của riêng bạn.


Cả hai (cái này và bên dưới) asnwers đều tuyệt vời. Tôi sẽ sử dụng phương pháp này nếu bạn quan tâm nhiều hơn đến tính minh bạch của mã trong OOP truyền thống. Tuy nhiên, nếu bạn thực hiện phát triển dựa trên dữ liệu, giải pháp @Heisenorms sẽ phục vụ bạn tốt hơn.
IndieForger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.