DelayFrame
1. 概要
DelayFrame は、Delay のフレームベース版です。ソースシーケンスの各要素の発行を指定したフレーム数だけ遅延させます。要素の順序は維持されます。
Unity などのゲームエンジン環境で、フレーム単位の遅延処理を行いたい場合に使用します。
2. シグネチャ
フレーム数による遅延
csharp
public static Observable<T> DelayFrame<T>(
this Observable<T> source,
int frameCount)各要素を frameCount フレームだけ遅延させて発行します。
csharp
source.DelayFrame(5)フレーム数 + FrameProvider による遅延
csharp
public static Observable<T> DelayFrame<T>(
this Observable<T> source,
int frameCount,
FrameProvider frameProvider)FrameProvider を指定してフレームカウントの実装を差し替えられます。
csharp
source.DelayFrame(5, fakeFrameProvider)overload の使い分け
| overload | 使う場面 |
|---|---|
int frameCount | Unity などでデフォルトのフレームプロバイダーを使う場合 |
int frameCount, FrameProvider | テスト時や独自のフレームプロバイダーを使いたい場合 |
3. マーブルダイアグラム
ソースの各要素が指定フレーム数分だけシフトされて発行されます。要素間の相対的な間隔は維持されます。
4. サンプルコード
csharp
using R3;
// Unity でエフェクトを 3 フレーム遅延させて適用
effectTriggerObservable
.DelayFrame(3)
.Subscribe(_ => ApplyEffect());
// FakeFrameProvider を使ったテスト
var fakeFrames = new FakeFrameProvider();
var results = new List<int>();
Observable.Return(42)
.DelayFrame(5, fakeFrames)
.Subscribe(x => results.Add(x));
// results: [] — まだ遅延中
fakeFrames.Advance(5);
// results: [42] — 遅延後に発行5. 補足
Delay との違い
| 項目 | Delay | DelayFrame |
|---|---|---|
| 時間単位 | 実時間(TimeSpan) | フレーム数(int) |
| プロバイダー | TimeProvider | FrameProvider |
| 主な用途 | 一般的な .NET アプリケーション | Unity などのゲームエンジン |
動作の仕組みは Delay と同一で、時間の計測単位がフレームに変わるだけです。