ฉันกำลังมองหาวิธีทั่วไป / นำมาใช้ซ้ำเพื่อรอ coroutines และการดำเนินการแบบอะซิงโครนัสให้เสร็จใน Unity 5 คล้ายกับawait
คำสำคัญของ C # 5
วิธีที่ง่ายที่สุดที่ฉันนึกได้ก็คือ:
public class SomeUtility {
public bool IsDoingSomething { get; private set; }
public IEnumerator DoSomethingAsync() {
IsDoingSomething = true;
yield return new WaitForSeconds(2);
IsDoingSomething = false;
}
}
และจากนั้นใน coroutine อื่น:
while(!someUtilityInstance.IsDoingSomething)
yield return null;
อย่างไรก็ตามมันไม่ได้ดีมากเพราะมันจะตัดโค้ดที่มีwhile
คำสั่งไม่สามารถใช้ซ้ำได้ (ต้องการอินสแตนซ์และคลาสเฉพาะแม้กระทั่งสำหรับฟังก์ชั่นยูทิลิตี้ง่าย ๆ !) และหลาย ๆ อย่างของ singleton หรือ static
AsyncOperation
ผมพบว่าใกล้เคียงที่สุดคือการใช้ความสามัคคีของ นี่มันใช้งานได้ดีมาก:
public static IEnumerator Await(this AsyncOperation operation) {
while(!operation.isDone)
yield return operation;
}
yield return SceneManager.LoadLevelAsync("blaaaah").Await();
อย่างไรก็ตาม .. ปัญหาคือ: วิธีการสร้างAsyncOperation
? ตัวอย่างเช่นการSceneManager
ใช้บริการบางอย่าง แต่เอกสารประกอบไม่มีอะไรสมบูรณ์เกี่ยวกับการสร้างการดำเนินการที่กำหนดเองหรือการตัด coroutines ที่มีอยู่เป็นต้น
ดังนั้นมีวิธีในการสร้าง "รอคอย" ง่าย ๆ ทั่วไปและ resuable สำหรับ coroutines ที่กำหนดเองหรือไม่?