「Unity/UniRx/値変更検知/配列」の版間の差分
提供: 初心者エンジニアの簡易メモ
(同じ利用者による、間の2版が非表示) | |||
行5: | 行5: | ||
public class ReactiveConnectionScene : MonoBehaviour | public class ReactiveConnectionScene : MonoBehaviour | ||
{ | { | ||
− | private ReactiveCollection< | + | private ReactiveCollection<string> users = new ReactiveCollection<string>(); |
void Start() | void Start() | ||
{ | { | ||
− | + | users | |
+ | .ObserveAdd() | ||
+ | .Subscribe(value => | ||
+ | { | ||
+ | Debug.Log($"[Add]Index={value.Index},Value={value.Value}"); | ||
+ | }); | ||
+ | users | ||
+ | .ObserveMove() | ||
+ | .Subscribe(value => | ||
+ | { | ||
+ | Debug.Log($"[Move]Value={value.Value},NewIndex={value.NewIndex},OldIndex={value.OldIndex}"); | ||
+ | }); | ||
+ | users | ||
+ | .ObserveRemove() | ||
+ | .Subscribe(value => | ||
+ | { | ||
+ | Debug.Log($"[Remove]Index={value.Index},Value={value.Value}"); | ||
+ | }); | ||
+ | users | ||
.ObserveReplace() | .ObserveReplace() | ||
.Subscribe(value => | .Subscribe(value => | ||
{ | { | ||
Debug.Log($"[Replace]Index={value.Index},NewValue={value.NewValue},OldValue={value.OldValue}"); | Debug.Log($"[Replace]Index={value.Index},NewValue={value.NewValue},OldValue={value.OldValue}"); | ||
+ | |||
}); | }); | ||
− | + | users | |
− | + | .ObserveReset() | |
+ | .Subscribe(value => | ||
+ | { | ||
+ | Debug.Log($"[Reset]"); | ||
+ | }); | ||
+ | |||
+ | users.Add("taro"); | ||
+ | users[0] = "taro!"; | ||
+ | users.Add("jiro"); | ||
+ | users.Add("saburo"); | ||
+ | users.Move(0, 1); // 配列0を配列1へ移動(jiro, taro, saburo) | ||
+ | users.Move(1, 2); // 配列1を配列2へ移動(jiro, saburo, taro) | ||
} | } | ||
} | } | ||
</pre> | </pre> | ||
出力 | 出力 | ||
− | + | <pre> | |
+ | [Add]Index=0,Value=taro | ||
+ | [Replace]Index=0,NewValue=taro!,OldValue=taro | ||
+ | [Move]Value=taro!,NewIndex=1,OldIndex=0 | ||
+ | [Move]Value=taro!,NewIndex=2,OldIndex=1 | ||
+ | </pre> | ||
参考:https://hal9.hateblo.jp/entry/2021/06/06/071739 | 参考:https://hal9.hateblo.jp/entry/2021/06/06/071739 |
2022年3月29日 (火) 03:00時点における最新版
配列の検知更新
値をReactiveCollectionで入れて、ObserveReplaceで検知する。
public class ReactiveConnectionScene : MonoBehaviour { private ReactiveCollection<string> users = new ReactiveCollection<string>(); void Start() { users .ObserveAdd() .Subscribe(value => { Debug.Log($"[Add]Index={value.Index},Value={value.Value}"); }); users .ObserveMove() .Subscribe(value => { Debug.Log($"[Move]Value={value.Value},NewIndex={value.NewIndex},OldIndex={value.OldIndex}"); }); users .ObserveRemove() .Subscribe(value => { Debug.Log($"[Remove]Index={value.Index},Value={value.Value}"); }); users .ObserveReplace() .Subscribe(value => { Debug.Log($"[Replace]Index={value.Index},NewValue={value.NewValue},OldValue={value.OldValue}"); }); users .ObserveReset() .Subscribe(value => { Debug.Log($"[Reset]"); }); users.Add("taro"); users[0] = "taro!"; users.Add("jiro"); users.Add("saburo"); users.Move(0, 1); // 配列0を配列1へ移動(jiro, taro, saburo) users.Move(1, 2); // 配列1を配列2へ移動(jiro, saburo, taro) } }
出力
[Add]Index=0,Value=taro [Replace]Index=0,NewValue=taro!,OldValue=taro [Move]Value=taro!,NewIndex=1,OldIndex=0 [Move]Value=taro!,NewIndex=2,OldIndex=1