YieldFrame
1. 概要
YieldFrame は、次のフレームで Unit を 1 つ発行して完了するファクトリメソッドです。Yield のフレームベース版であり、FrameProvider を介して次のフレームまで処理を遅延させます。
2. シグネチャ
基本
csharp
public static Observable<Unit> YieldFrame(CancellationToken cancellationToken = default)デフォルトの FrameProvider を使用して、次のフレームで Unit を発行し完了します。
csharp
Observable.YieldFrame()FrameProvider 指定
csharp
public static Observable<Unit> YieldFrame(FrameProvider frameProvider, CancellationToken cancellationToken = default)使用する FrameProvider を明示的に指定するオーバーロードです。
csharp
Observable.YieldFrame(myFrameProvider)オーバーロードの使い分け
| overload | 使う場面 |
|---|---|
YieldFrame() | デフォルトの FrameProvider で次のフレームに遅延する |
YieldFrame(FrameProvider) | カスタム FrameProvider を使用する |
3. マーブルダイアグラム
購読すると、次のフレームで Unit を 1 つ発行し、直後に完了通知を送ります。
4. サンプルコード
csharp
using R3;
// 次のフレームで 1 回だけ発行
Observable.YieldFrame()
.Subscribe(
_ => Console.WriteLine("次フレームで実行"),
_ => Console.WriteLine("完了"));
// 出力(次フレーム): 次フレームで実行
// 出力: 完了
// FrameProvider を指定
Observable.YieldFrame(myFrameProvider)
.Subscribe(_ => Console.WriteLine("次フレームで実行"));
// Concat で 2 フレームにまたがる処理
Observable.YieldFrame()
.Select(_ => "フレーム 1")
.Concat(Observable.YieldFrame().Select(_ => "フレーム 2"))
.Subscribe(x => Console.WriteLine(x));
// 出力:
// フレーム 1
// フレーム 25. 補足
Yield との違い
Yield は TimeProvider ベースの次のタイムステップに遅延します。YieldFrame は FrameProvider ベースの次のフレームに遅延します。フレームの概念がない環境では Yield を、ゲームエンジンなどでは YieldFrame を使用してください。
NextFrame との違い
NextFrame も次のフレームで Unit を発行して完了します。どちらも同様の動作ですが、NextFrame は EveryUpdate の単発版として位置付けられており、YieldFrame は Yield のフレーム版として位置付けられています。