Unity/R3/値変更検知/ReactivePropertyData
提供: 初心者エンジニアの簡易メモ
Dataクラスを維持したまま、ReactivePropertyを使う全体サンプル
using UnityEngine; using R3; public class ReactivePropertyDataScene : MonoBehaviour { SampleReactiveProperty sampleReactiveProperty; class SampleData { public bool IsCompleted = false; } class SampleReactiveProperty { private CompositeDisposable disposables = new CompositeDisposable(); private SampleData sampleData; public ReactiveProperty<bool> IsCompleted; public SampleReactiveProperty(SampleData sampleData) { this.sampleData = sampleData; IsCompleted = new ReactiveProperty<bool>(sampleData.IsCompleted); // ReactiveProperty の変更を監視し、SampleData に反映 IsCompleted.Subscribe(value => sampleData.IsCompleted = value) .AddTo(disposables); } public void Request() { IsCompleted.Value = true; } public void Dispose() { disposables?.Dispose(); } } void Start() { var sampleData = new SampleData(); sampleReactiveProperty = new SampleReactiveProperty(sampleData); sampleReactiveProperty.IsCompleted .Subscribe(value => { if (!value) return; Debug.Log("Change IsCompleted : " + value); Debug.Log("Change sampleData.IsCompleted : " + sampleData.IsCompleted); }) .AddTo(gameObject); // 5秒後に遅延実行 Observable.Timer(System.TimeSpan.FromSeconds(5)) .Subscribe(_ => { sampleReactiveProperty.Request(); }).AddTo(gameObject); } void OnDestroy() { sampleReactiveProperty?.Dispose(); } }