コルーチン
Unityライクなコルーチン機能を利用できます。コルーチンとは、複数フレームにまたがる非同期処理を簡潔に記述するための仕組みです。
基本の使い方
まず、プラグインとして CoroutineManager をアプリケーションに登録します。
// プラグイン登録例(Program.cs)var app = PrometeApp.Create() .Use<CoroutineManager>() .BuildWithOpenGLDesktop();
return app.Run<MainScene>();CoroutineManager を受け取り、Startメソッドに IEnumerator を渡します。この IEnumerator を返すメソッド内の yield return にイールド命令(後述)を渡すことで、一定時間や条件で処理を遅延させることができます。
// シーンでの利用例public class MainScene(CoroutineManager coroutines, ConsoleLayer console) : Scene{ public override void OnStart() { coroutines.Start(MyCoroutine()); console.Print("コルーチンを開始しました"); }
private IEnumerator MyCoroutine() { // 1秒待つ yield return new WaitForSeconds(1.0f); Console.WriteLine("1秒経過"); }}主なAPI
coroutines.Start(IEnumerator)
コルーチンを開始coroutines.Stop(Coroutine)
コルーチンを停止coroutines.Clear()
全コルーチン停止
コルーチンの終了条件
コルーチンは、以下の条件で終了・中断されます。
- 処理が終了したとき
Stopメソッドが呼ばれたとき- ハンドルされていない例外が発生したとき
- 例外が発生すると即座に中断され、Errorコールバックが呼び出されます
- Errorコールバックが登録されていない場合、アプリケーションはクラッシュします
yield breakが実行されたとき- シーンが切り替わったとき
- ただし、
Coroutine.KeepAlive()メソッドを呼び出すことで、シーンが切り替わっても中断されなくなります
- ただし、
イールド命令
コルーチンの中では、 yield return で以下のようなオブジェクト(イールド命令)を返すことで、処理を遅延できます。
WaitForSeconds(float seconds)
指定した秒数だけ待機しますWaitUntil(Func<bool> condition)
条件がtrueになるまで待機しますWaitWhile(Func<bool> condition)
条件がtrueの間だけ待機しますWaitForTask(Task task)
指定したTask/ValueTaskが完了するまで待機しますWaitUntilNextFrame()
次のフレームまで待機します(yield return nullでも同等)
コールバックの登録(Then, Error)
コルーチンが正常に完了したときや、例外で中断したときに呼び出されるコールバックを登録できます。
coroutines .Start(MyCoroutine()) .Then(() => Console.WriteLine("完了!")) .Error(ex => Console.WriteLine($"例外発生: {ex.Message}"));Then(Action)
コルーチンが正常終了したときに実行されますError(Action<Exception>)
コルーチン内で例外が発生したときに実行されます