Skip to content

EveryUpdate

1. 概要

EveryUpdate は、毎フレーム(毎アップデートティック)に Unit を発行し続けるファクトリメソッドです。自動的には完了しません。

ゲームエンジン(Unity など)における Update() コールバックのリアクティブ版に相当し、毎フレーム実行したいロジックを Observable パイプラインとして記述できます。

2. シグネチャ

基本

csharp
public static Observable<Unit> EveryUpdate()

デフォルトの FrameProvider を使用して、毎フレーム Unit を発行します。

csharp
Observable.EveryUpdate()

CancellationToken 付き

csharp
public static Observable<Unit> EveryUpdate(CancellationToken cancellationToken)

キャンセルトークンを指定して、購読を停止できるオーバーロードです。

csharp
var cts = new CancellationTokenSource();
Observable.EveryUpdate(cts.Token)

FrameProvider 指定

csharp
public static Observable<Unit> EveryUpdate(FrameProvider frameProvider)

使用する FrameProvider を明示的に指定するオーバーロードです。

csharp
Observable.EveryUpdate(myFrameProvider)

FrameProvider + CancellationToken

csharp
public static Observable<Unit> EveryUpdate(FrameProvider frameProvider, CancellationToken cancellationToken)

FrameProvider とキャンセルトークンの両方を指定するオーバーロードです。

オーバーロードの使い分け

overload使う場面
EveryUpdate()デフォルトの FrameProvider で毎フレーム発行する
EveryUpdate(CancellationToken)キャンセル可能な毎フレーム発行
EveryUpdate(FrameProvider)カスタム FrameProvider を使用する
EveryUpdate(FrameProvider, CancellationToken)カスタム FrameProvider とキャンセルの両方を指定する

3. マーブルダイアグラム

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

毎フレーム Unit を発行し続けます。完了通知は自動的には送信されず、CancellationToken のキャンセルや Dispose で購読を終了する必要があります。

4. サンプルコード

csharp
using R3;

// 毎フレーム処理を実行
var cts = new CancellationTokenSource();
Observable.EveryUpdate(cts.Token)
    .Subscribe(_ => Console.WriteLine("update"));
// 出力:
// update(毎フレーム)
// ...(cts.Cancel() で停止)

// Where と組み合わせて条件付きフレーム処理
Observable.EveryUpdate()
    .Where(_ => IsPlayerMoving())
    .Subscribe(_ => UpdatePlayerPosition());

// Take で最初の 100 フレームだけ処理
Observable.EveryUpdate()
    .Take(100)
    .Subscribe(
        _ => Console.WriteLine("processing"),
        _ => Console.WriteLine("100 フレーム完了"));

5. 補足

IntervalFrame との違い

IntervalFrame は指定したフレーム間隔で発行しますが、EveryUpdate は毎フレーム発行に特化しています。IntervalFrame(1) でも同様の動作が得られますが、EveryUpdate はその用途に最適化された実装です。

NextFrame との違い

NextFrame は次の 1 フレームで発行して完了する単発のファクトリメソッドです。EveryUpdate は停止するまで毎フレーム発行し続けます。