本日は UniRx の小ネタ枠です。
UniRxを使ってGameObjectのアクティブ状態変化をIObservableで監視する方法について記事にします。
ObserveEveryValueChanged
ObserveEveryValueChangedはUniRxで定義されている全クラスの拡張メソッドです。
この関数を利用することで、様々なクラスのフレーム間での値変化の監視が行えるようになります。
例えば以下のように利用することでGameObject自身のアクティブ状態変化を監視することができます。
IObservable<bool> CurrentActiveSelf => this.gameObject.ObserveEveryValueChanged(x => x.activeSelf);
GameObjectのアクティブ状態変化をIObservableで監視する
ObserveEveryValueChangedを使ってGameObjectのアクティブ状態変化を監視する以下のサンプルスクリプトを作成しました。
・ActiveObserveTest.cs
using UniRx; using UnityEngine; public class ActiveObserveTest : MonoBehaviour { /// <summary> /// アクティブの変更を監視するオブジェクト /// </summary> [SerializeField] private GameObject targetObject; private void Start() { // アクティブの変更を監視する targetObject.ObserveEveryValueChanged(x => x.activeSelf) .Subscribe(isActive => Debug.Log($"Active : {isActive}")) .AddTo(this); } }
任意のオブジェクトにサンプルスクリプトを設定し、状態変化を監視したいオブジェクトの参照を設定します。

動作確認
シーンを再生して動作を確認します。

ObserveEveryValueChangedを設定したオブジェクトのアクティブ状態を変更するとデバッグログが更新されれば成功です。
