Skip to content

Unity Providers

1. 概要

R3.Unity は、Unity の PlayerLoop と時間スケールに対応した FrameProvider / TimeProvider を提供します。時間・フレーム系ファクトリやオペレーターに渡すことで、Unity の各 PlayerLoop タイミングで処理できます。

2. UnityFrameProvider

ProviderPlayerLoop タイミング
UnityFrameProvider.InitializationInitialization
UnityFrameProvider.EarlyUpdateEarlyUpdate
UnityFrameProvider.FixedUpdateFixedUpdate
UnityFrameProvider.PreUpdatePreUpdate
UnityFrameProvider.UpdateUpdate
UnityFrameProvider.PreLateUpdatePreLateUpdate
UnityFrameProvider.PostLateUpdatePostLateUpdate
UnityFrameProvider.TimeUpdateTimeUpdate
UnityFrameProvider.PostFixedUpdatePostFixedUpdate

3. UnityTimeProvider

UnityTimeProvider には通常の Time.time ベース、Time.unscaledTime ベース、Time.realtimeSinceStartup ベースの Provider が用意されています。

種類
TimeUnityTimeProvider.Update
IgnoreTimeScaleUnityTimeProvider.UpdateIgnoreTimeScale
RealtimeUnityTimeProvider.UpdateRealtime

各 PlayerLoop タイミングごとに InitializationEarlyUpdateFixedUpdatePreUpdateUpdatePreLateUpdatePostLateUpdateTimeUpdate の Provider が用意されています。

4. SetDefaultObservableSystem

csharp
public static void SetDefaultObservableSystem()

public static void SetDefaultObservableSystem(
    Action<Exception> unhandledExceptionHandler)

R3 の既定の FrameProvider / TimeProvider / 未処理例外ハンドラを Unity 向けに設定します。通常は R3.Unity の初期化処理で利用されます。

5. サンプルコード

csharp
Observable.IntervalFrame(1, UnityFrameProvider.FixedUpdate)
    .Subscribe(_ => Simulate())
    .AddTo(this);

Observable.Timer(TimeSpan.FromSeconds(1), UnityTimeProvider.UpdateIgnoreTimeScale)
    .Subscribe(_ => Show())
    .AddTo(this);