facebook twitter hatena line email

「Unity/UniRx/値変更検知」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(値変更検知サンプル)
行1: 行1:
 +
==値変更検知の方法==
 +
ReactivePropertyでもできるが、ObserveEveryValueChangedを、使ったサンプルを紹介。ちなみに、ObserveEveryValueChangedのほうが、コードが、わかりやすい。
 +
 +
参考:https://nekogeek.jp/reactive-property-vs-observe-every-value-changed/
 +
 
==値変更検知サンプル==
 
==値変更検知サンプル==
 
IsCompletedが、trueになったときに、検知。
 
IsCompletedが、trueになったときに、検知。

2022年2月16日 (水) 21:37時点における版

値変更検知の方法

ReactivePropertyでもできるが、ObserveEveryValueChangedを、使ったサンプルを紹介。ちなみに、ObserveEveryValueChangedのほうが、コードが、わかりやすい。

参考:https://nekogeek.jp/reactive-property-vs-observe-every-value-changed/

値変更検知サンプル

IsCompletedが、trueになったときに、検知。

詳しくは、1フレーム内で発生した複数回の変動は検知できず、前フレームと今フレームの変化のみ検知できるっぽい。

参考:https://qiita.com/toRisouP/items/d0d32cf674a00f3a8427

sampleClient.ObserveEveryValueChanged(x => x.IsCompleted)
            .Subscribe(isCompleted =>
            {
                // 値が変更が入ると処理される
                if (!isCompleted) return;
                Debug.Log("isCompleted=" + isCompleted);
                Debug.Log("sampleClient.Url=" + sampleClient.Url);
            })
            .AddTo(gameObject);

全体サンプル

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