「Unity/R3/値変更検知/ReactivePropertyをリストの項目に」の版間の差分
提供: 初心者エンジニアの簡易メモ
細 (Admin がページ「Unity/UniRx/値変更検知/ReactivePropertyのリスト」を「Unity/R3/値変更検知/ReactivePropertyのリスト」に、リダイレクトを残さずに移動しました) |
|||
行1: | 行1: | ||
<pre> | <pre> | ||
using UnityEngine; | using UnityEngine; | ||
− | using | + | using R3; |
using System; | using System; | ||
using System.Collections; | using System.Collections; |
2025年3月20日 (木) 21:08時点における版
using UnityEngine; using R3; using System; using System.Collections; using System.Collections.Generic; public class ReactivePropertyListScene : MonoBehaviour { SampleReactiveProperty sampleReactiveProperty; class SampleUser { public ReactiveProperty<string> Name; public ReactiveProperty<int> Age; public SampleUser(string name, int age) { Name = new ReactiveProperty<string>(name); Age = new ReactiveProperty<int>(age); } } class SampleReactiveProperty { private CompositeDisposable disposables = new CompositeDisposable(); private List<SampleUser> users = new List<SampleUser>(new List<SampleUser> { new SampleUser("Alice", 10), new SampleUser("Bob", 12), new SampleUser("Charlie", 15) }); public List<SampleUser> Users => users; private Subject<int> nameAsObservable = new Subject<int>(); private Subject<int> ageAsObservable = new Subject<int>(); public Subject<int> NameAsObservable => nameAsObservable; public Subject<int> AgeAsObservable => ageAsObservable; public SampleReactiveProperty() { int i = 0; foreach (SampleUser user in users) { int id = i; user.Age.Subscribe(age => { nameAsObservable.OnNext(id); }).AddTo(disposables); user.Name.Subscribe(name => { ageAsObservable.OnNext(id); }).AddTo(disposables); i++; } } public void Dispose() { disposables?.Dispose(); } } void Start() { sampleReactiveProperty = new SampleReactiveProperty(); sampleReactiveProperty.NameAsObservable .Subscribe(id => { Debug.Log("Change name : " + sampleReactiveProperty.Users[id].Name); }) .AddTo(gameObject); sampleReactiveProperty.AgeAsObservable .Subscribe(id => { Debug.Log("Change age : " + sampleReactiveProperty.Users[id].Age); }) .AddTo(gameObject); // 5秒後に遅延実行 Observable.Timer(System.TimeSpan.FromSeconds(5)) .Subscribe(_ => { sampleReactiveProperty.Users[1].Name.Value = "taro"; sampleReactiveProperty.Users[1].Age.Value = 11; }).AddTo(gameObject); } void OnDestroy() { sampleReactiveProperty?.Dispose(); } }