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();
}
}
