この記事でのバージョン
Unity 2021.1.16f1
UniRx - Reactive Extensions for Unity 7.1.0
はじめに
UnityでUIを実装する際にLayout Groupを使ってUIのサイズを自動調整する事がよくありますが、
今回はそのRectTransformのサイズが変わったタイミングを
UniRxを使って検知してみようという感じの記事です!
なお、そもそも「UniRxがよく分からん」という方は以下の記事を参照の事。
また、記事中では以下のアセットを使っています。
Clean & Minimalist GUI Pack | 2D GUI | Unity Asset Store |
OnRectTransformDimensionsChangeAsObservable
さっそくですが、UniRxでRectTransformのサイズ変更を検知する場合は
ObservableRectTransformTriggerのOnRectTransformDimensionsChangeAsObservableを使います。
名前が長いので複雑そうですが、実際はコンポーネントを追加して処理を登録するだけ。
具体的には以下のような感じ。
//ObservableRectTransformTriggerを使うのに必要 using UniRx.Triggers;
private void Awake() { //ObservableRectTransformTriggerを追加 var trigger = gameObject.AddComponent<ObservableRectTransformTrigger>(); //RectTransformが変化した時を購読(処理を登録)、AddToは不要 trigger.OnRectTransformDimensionsChangeAsObservable().Subscribe(OnChangeRectTransformDimensions ); } //RectTransformのサイズが変化した private void OnChangeRectTransformDimensions(Unit unit) { var rectTransform = GetComponent<RectTransform>(); Debug.Log($"RectTransformが変化, Width {rectTransform.sizeDelta.x}"); }
余談ですが、Layout Groupは使い方によっては負荷がかなり高くなるので注意が必要だったりします。
このLayout Group、なんと使うとGetComponentsが実行される回数が増えて重くなるので、
使わない方が良いらしいです。
参考