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. マーブルダイアグラム
毎フレーム 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 は停止するまで毎フレーム発行し続けます。