特定の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で監視するのは嫌だったので見つけれてよかった!