|
|
(同じ利用者による、間の15版が非表示) |
行1: |
行1: |
− | ==値変更検知の方法==
| + | [[Unity/UniRx/値変更検知/方法]] |
− | 以下2つのやり方がある。
| + | |
− | *ReactiveProperty
| + | |
− | *ObserveEveryValueChanged
| + | |
| | | |
− | ObserveEveryValueChangedは、前フレームと今フレームの変化をフレームごとに、判断するので負荷が高いかも。あと、1フレーム内で発生した複数回の変動は検知できない。
| + | [[Unity/UniRx/値変更検知/ObserveEveryValueChanged]] |
− | ただ、ReactivePropertyはコードが、更新値に.valueをつけなくてはならないし、見た目が、わかりずらい。ObserveEveryValueChangedのほうが保守性が高いかも。
| + | |
| | | |
− | 参考:https://qiita.com/toRisouP/items/d0d32cf674a00f3a8427
| + | [[Unity/UniRx/値変更検知/ReactiveProperty]] |
| | | |
− | 参考:https://nekogeek.jp/reactive-property-vs-observe-every-value-changed/
| + | [[Unity/UniRx/値変更検知/配列]] |
| | | |
− | ==ObserveEveryValueChangedを使った値変更検知サンプル==
| + | [[Unity/UniRx/値変更検知/ObserveEveryValueChanged配列]] |
− | IsCompletedが、trueになったときに、検知。
| + | |
| | | |
− | <pre>
| + | [[Unity/UniRx/値変更検知/配列数]] |
− | sampleClient.ObserveEveryValueChanged(x => x.IsCompleted)
| + | |
− | .Subscribe(isCompleted =>
| + | |
− | {
| + | |
− | // 値が変更が入ると処理される
| + | |
− | if (!isCompleted) return;
| + | |
− | Debug.Log("isCompleted=" + isCompleted);
| + | |
− | Debug.Log("sampleClient.Url=" + sampleClient.Url);
| + | |
− | })
| + | |
− | .AddTo(gameObject);
| + | |
− | </pre>
| + | |
− | | + | |
− | ==ObserveEveryValueChangedを使った全体サンプル==
| + | |
− | <pre>
| + | |
− | using UnityEngine;
| + | |
− | using UniRx;
| + | |
− | public class ChangeValueScene : MonoBehaviour
| + | |
− | {
| + | |
− | class SampleClient
| + | |
− | {
| + | |
− | public bool IsCompleted = false;
| + | |
− | public string Url = "ttp://example.com";
| + | |
− | public void Request()
| + | |
− | {
| + | |
− | IsCompleted = true;
| + | |
− | }
| + | |
− | }
| + | |
− | void Start()
| + | |
− | {
| + | |
− | var sampleClient = new SampleClient();
| + | |
− | sampleClient.Request();
| + | |
− | sampleClient.ObserveEveryValueChanged(x => x.IsCompleted)
| + | |
− | .Subscribe(isCompleted =>
| + | |
− | {
| + | |
− | // 値が変更が入ると処理される
| + | |
− | if (!isCompleted) return;
| + | |
− | Debug.Log("isCompleted=" + isCompleted);
| + | |
− | Debug.Log("sampleClient.Url=" + sampleClient.Url);
| + | |
− | })
| + | |
− | .AddTo(gameObject);
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |
− | | + | |
− | ==ReactivePropertyを使った全体サンプル==
| + | |
− | <pre>
| + | |
− | using UnityEngine;
| + | |
− | using UniRx;
| + | |
− | public class ReactivePropertyScene : MonoBehaviour
| + | |
− | {
| + | |
− | class SampleClient
| + | |
− | {
| + | |
− | public ReactiveProperty<bool> IsCompleted = new ReactiveProperty<bool>(false);
| + | |
− | public void Request()
| + | |
− | {
| + | |
− | IsCompleted.Value = true;
| + | |
− | }
| + | |
− | }
| + | |
− | void Start()
| + | |
− | {
| + | |
− | var sampleClient = new SampleClient();
| + | |
− | sampleClient.Request();
| + | |
− | sampleClient.IsCompleted
| + | |
− | .Subscribe(value =>
| + | |
− | {
| + | |
− | if (!value) return;
| + | |
− | Debug.Log("Change IsCompleted : " + value);
| + | |
− | })
| + | |
− | .AddTo(gameObject);
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |