facebook twitter hatena line email

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

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「 ==ObserveEveryValueChangedを使った値変更検知サンプル== IsCompletedが、trueになったときに、検知。 <pre> sampleClient.ObserveEveryValueChanged(x...」)
 
(ObserveEveryValueChangedを使った全体サンプル)
行51: 行51:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
注意:SampleClientが、MonoBehaviourを、継承していると反応しなくなる。

2022年11月24日 (木) 03:42時点における版

ObserveEveryValueChangedを使った値変更検知サンプル

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

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

ObserveEveryValueChangedを使った全体サンプル

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.ObserveEveryValueChanged(x => x.IsCompleted)
            // .Skip(1) // 初期値を検知を飛ばしたい場合
            .Subscribe(isCompleted =>
            {
                // 値が変更が入ると処理される
                if (!isCompleted) return;
                Debug.Log("isCompleted=" + isCompleted);
                Debug.Log("sampleClient.Url=" + sampleClient.Url);
            })
            .AddTo(gameObject);
        // 5秒後に遅延実行
        Observable.Timer(System.TimeSpan.FromSeconds(5))
            .Subscribe(_ => {
                sampleClient.Request();
            }).AddTo(gameObject);
    }
}

注意:SampleClientが、MonoBehaviourを、継承していると反応しなくなる。