(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発した新作VRソフトです!


RectTransformのサイズ変更を検知する OnRectTransformDimensionsChangeAsObservable【Unity】【uGUI】【UniRx】


このエントリーをはてなブックマークに追加



この記事でのバージョン
Unity 2021.1.16f1
UniRx - Reactive Extensions for Unity 7.1.0

はじめに

UnityでUIを実装する際にLayout Groupを使ってUIのサイズを自動調整する事がよくありますが、

今回はそのRectTransformのサイズが変わったタイミングを

UniRxを使って検知してみようという感じの記事です!

f:id:kan_kikuchi:20210930151045g:plain


なお、そもそも「UniRxがよく分からん」という方は以下の記事を参照の事。



また、記事中では以下のアセットを使っています。

Clean & Minimalist GUI Pack | 2D GUI | Unity Asset Store



OnRectTransformDimensionsChangeAsObservable

さっそくですが、UniRxでRectTransformのサイズ変更を検知する場合は

ObservableRectTransformTriggerOnRectTransformDimensionsChangeAsObservableを使います。


名前が長いので複雑そうですが、実際はコンポーネントを追加して処理を登録するだけ。

具体的には以下のような感じ。

//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}");
}
f:id:kan_kikuchi:20210930151045g:plain


余談ですが、Layout Groupは使い方によっては負荷がかなり高くなるので注意が必要だったりします。

このLayout Group、なんと使うとGetComponentsが実行される回数が増えて重くなるので、

使わない方が良いらしいです。




参考