TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Unity: RectTransformの変更を検知するためにUniRxのOnRectTransformDimensionsChangeAsObservableを使えば便利だった

特定のuGUIのRectTransformのサイズが変わった時に連動して何かしたい場合に、どうすればベストなのか調べていたら、UniRxのOnRectTransformDimensionsChangeAsObservableを使えば良いことたどり着きました。

RectTransformの値変更を検知する

[Unity]uGUIでRectTransfromが確定したときに何かしたい…みたいな話|杏z学習帳
このサイトによるとUniRxを使えば検知できるとのことだったので、早速調べてみると以下のようにすればOKでした
後述しますが、以下の2点が注目点です。

  • AddToは不要(自動破棄のため)
  • ObservableEventTrigger(uGUI用)なのでObservableTriggers系のAddComponentは必要
using UniRx;
using UniRx.Triggers;

void Awake()
    {
        var trigger = gameObject.AddComponent<ObservableRectTransformTrigger>();
        trigger.OnRectTransformDimensionsChangeAsObservable().Subscribe(
            Handler
        );
        void Handler(Unit unit) {
            // 何かの処理
        }
    }

ObservableTriggers

neue cc - UniRx 4.8 - 軽量イベントフックとuGUI連携によるデータバインディング
ObservableTriggersに色々イベントを検知できるみたいです。以下抜粋です。

  • ObservableMonoBehaviour は非推奨 (旧式)
  • Triggerは対象GameObjectがDestroyされると、OnCompletedを流してイベント発火を終了する
  • UniRx.Triggersをusingしている場合は、XxxAsObservableメソッドを直接拡張メソッドから呼べる (自動でAddComponetしてくれるのでAddComponentしなくても良い)
  • ObservableEventTrigger(uGUI用)とObservableStateMachineTrigger(Animation用)だけは自動付与がないので、これらの場合だけ自分で意識的に付与する必要がある

感想

Updateで監視するのは嫌だったので見つけれてよかった!