ฉันจะไปเกี่ยวกับการรวบรวมชุดการโทร Coroutine ที่ควรดำเนินการหลังจากที่อื่นได้อย่างไร
ฉันได้ลองรับเอฟเฟกต์สีที่กระพริบวนลูปสีใน coroutine แต่มันไม่ทำงาน
ฉันจะไปเกี่ยวกับการรวบรวมชุดการโทร Coroutine ที่ควรดำเนินการหลังจากที่อื่นได้อย่างไร
ฉันได้ลองรับเอฟเฟกต์สีที่กระพริบวนลูปสีใน coroutine แต่มันไม่ทำงาน
คำตอบ:
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")));
นอกจากสิ่งที่ Heisenbug อธิบายสิ่งที่คู่มือความสามัคคีไม่ได้ทำให้เห็นได้ชัดคือการที่คุณสามารถวัตถุที่คุณได้รับจากการโทรyield return
Coroutine
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);
}
บางครั้งสิ่งนี้ทำให้การอ่านดีกว่าการวนลูป MoveNext แต่มีข้อเสียที่คุณไม่สามารถป้องกันเด็ก coroutine จากการทำงานผ่านตรรกะภายในการวนซ้ำ coroutine สูงสุดซึ่งอาจเป็นประโยชน์สำหรับการสร้างเทคนิคการควบคุมการไหลที่ซับซ้อนมากขึ้นบน IEnumerator
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้คุณควรดูวิดีโอ Uniteซึ่งครอบคลุมการได้รับ coroutines ของคุณมากขึ้นโดยไม่ต้องสร้างตัวกำหนดเวลา coroutine ของคุณเอง