Unity Providers
1. 概要
R3.Unity は、Unity の PlayerLoop と時間スケールに対応した FrameProvider / TimeProvider を提供します。時間・フレーム系ファクトリやオペレーターに渡すことで、Unity の各 PlayerLoop タイミングで処理できます。
2. UnityFrameProvider
| Provider | PlayerLoop タイミング |
|---|---|
UnityFrameProvider.Initialization | Initialization |
UnityFrameProvider.EarlyUpdate | EarlyUpdate |
UnityFrameProvider.FixedUpdate | FixedUpdate |
UnityFrameProvider.PreUpdate | PreUpdate |
UnityFrameProvider.Update | Update |
UnityFrameProvider.PreLateUpdate | PreLateUpdate |
UnityFrameProvider.PostLateUpdate | PostLateUpdate |
UnityFrameProvider.TimeUpdate | TimeUpdate |
UnityFrameProvider.PostFixedUpdate | PostFixedUpdate |
3. UnityTimeProvider
UnityTimeProvider には通常の Time.time ベース、Time.unscaledTime ベース、Time.realtimeSinceStartup ベースの Provider が用意されています。
| 種類 | 例 |
|---|---|
| Time | UnityTimeProvider.Update |
| IgnoreTimeScale | UnityTimeProvider.UpdateIgnoreTimeScale |
| Realtime | UnityTimeProvider.UpdateRealtime |
各 PlayerLoop タイミングごとに Initialization、EarlyUpdate、FixedUpdate、PreUpdate、Update、PreLateUpdate、PostLateUpdate、TimeUpdate の 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);