Skip to content

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 frameCountUnity などでデフォルトのフレームプロバイダーを使う場合
int frameCount, FrameProviderテスト時や独自のフレームプロバイダーを使いたい場合

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

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

ソースの各要素が指定フレーム数分だけシフトされて発行されます。要素間の相対的な間隔は維持されます。

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 との違い

項目DelayDelayFrame
時間単位実時間(TimeSpanフレーム数(int
プロバイダーTimeProviderFrameProvider
主な用途一般的な .NET アプリケーションUnity などのゲームエンジン

動作の仕組みは Delay と同一で、時間の計測単位がフレームに変わるだけです。