Unity 5でコルーチンと非同期操作が完了するのを待つ一般的で再利用可能な方法を探しています。C#5のawait
キーワードと同様です。
私が考えることができる最も簡単な方法は次のようなものです:
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
はそれを使用していますが、カスタムオペレーションの作成や既存のコルーチンのラップなどについて、ドキュメントには完全に欠けています。
それで、カスタムコルーチンのためにシンプルで、一般的で、再利用可能な「待機」を作成する方法はありますか?
おそらく、リフレクションとコールバックを使用しますか?2つのメソッドをコルーチンに渡します。最初に行う方法。リフレクションを使用して、いつ終了するかを確認してから、2番目のコールを呼び出します
—
Evorlor