Skip to content

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. マーブルダイアグラム

YieldFrame のマーブルダイアグラム

購読すると、次のフレームで 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
// フレーム 2

5. 補足

Yield との違い

YieldTimeProvider ベースの次のタイムステップに遅延します。YieldFrameFrameProvider ベースの次のフレームに遅延します。フレームの概念がない環境では Yield を、ゲームエンジンなどでは YieldFrame を使用してください。

NextFrame との違い

NextFrame も次のフレームで Unit を発行して完了します。どちらも同様の動作ですが、NextFrameEveryUpdate の単発版として位置付けられており、YieldFrameYield のフレーム版として位置付けられています。