Я шукаю загальний / багаторазовий спосіб дочекатися завершення процедур і асинхронних операцій у 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;
}
}
а потім в іншій програмі:
while(!someUtilityInstance.IsDoingSomething)
yield return null;
Однак це не дуже приємно, оскільки він захаращує код while
висловлюваннями, не може використовуватись повторно (потрібні екземпляри та спеціальні класи навіть для простих утиліт!) Та багато одиночних чи статичних речей, де це навіть не потрібно.
Найближчий я знайшов використання Unity AsyncOperation
. Це дуже добре працює:
public static IEnumerator Await(this AsyncOperation operation) {
while(!operation.isDone)
yield return operation;
}
yield return SceneManager.LoadLevelAsync("blaaaah").Await();
Однак .. проблема полягає в тому, як створити AsyncOperation
? Деякі сервіси, наприклад SceneManager
, користуються ним, але в документації повністю бракує нічого про створення спеціальних операцій або обгортання існуючих процедур тощо.
Отже, чи є спосіб створити простий, загальний і доступний "очікування" для користувальницьких процедур?