Coroutines ในซีรีส์


9

ฉันจะไปเกี่ยวกับการรวบรวมชุดการโทร Coroutine ที่ควรดำเนินการหลังจากที่อื่นได้อย่างไร

ฉันได้ลองรับเอฟเฟกต์สีที่กระพริบวนลูปสีใน coroutine แต่มันไม่ทำงาน

คำตอบ:


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

นอกจากสิ่งที่ 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ซึ่งครอบคลุมการได้รับ coroutines ของคุณมากขึ้นโดยไม่ต้องสร้างตัวกำหนดเวลา coroutine ของคุณเอง


ทั้ง (นี้และต่ำกว่า) ผู้ตอบแบบสอบถามยอดเยี่ยม ฉันจะไปด้วยวิธีนี้ถ้าคุณสนใจเพิ่มเติมเกี่ยวกับความโปร่งใสของรหัสใน OOP แบบดั้งเดิม หากคุณกำลังพัฒนาโซลูชัน @Heisenbug ที่ขับเคลื่อนด้วยข้อมูลจะให้บริการคุณได้ดีขึ้น
IndieForger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.