NextFrame
1. 概要
NextFrame は、次のフレームで Unit を 1 つ発行して完了するファクトリメソッドです。EveryUpdate の単発版であり、処理を次のフレームに遅延させたいときに使用します。
ゲームエンジン(Unity など)で、現在のフレームの処理完了後に後続の処理を実行したい場合に有用です。
2. シグネチャ
基本
csharp
public static Observable<Unit> NextFrame(CancellationToken cancellationToken = default)デフォルトの FrameProvider を使用して、次のフレームで Unit を発行し完了します。
csharp
Observable.NextFrame()FrameProvider 指定
csharp
public static Observable<Unit> NextFrame(FrameProvider frameProvider, CancellationToken cancellationToken = default)使用する FrameProvider を明示的に指定するオーバーロードです。
csharp
Observable.NextFrame(myFrameProvider)オーバーロードの使い分け
| overload | 使う場面 |
|---|---|
NextFrame() | デフォルトの FrameProvider で次フレームに遅延する |
NextFrame(FrameProvider) | カスタム FrameProvider を使用する |
3. マーブルダイアグラム
購読すると、次のフレームで Unit を 1 つ発行し、直後に完了通知を送ります。
4. サンプルコード
csharp
using R3;
// 次のフレームで 1 回だけ発行
Observable.NextFrame()
.Subscribe(
_ => Console.WriteLine("次フレームで実行"),
_ => Console.WriteLine("完了"));
// 出力(次フレーム): 次フレームで実行
// 出力: 完了
// SelectMany と組み合わせてフレーム遅延を挿入
someObservable
.SelectMany(_ => Observable.NextFrame())
.Subscribe(_ => Console.WriteLine("元のイベントの次フレームで実行"));5. 補足
YieldFrame との違い
YieldFrame も次のフレームで Unit を発行して完了しますが、内部実装が異なる場合があります。どちらも同様の用途に使用できます。
ReturnFrame との違い
ReturnFrame は任意の型の値を次のフレーム(またはフレーム数指定)で発行できます。Unit のみが必要な場合は NextFrame がより簡潔です。
Yield との違い
Yield は TimeProvider ベースの次のタイムステップに遅延します。フレームベースの遅延が必要な場合は NextFrame を使用してください。