アプリ内のボタンを一括で登録するコード。
ボタンの数が多くなると、管理が大変になってきますね…
いいアセットがあるのかもしれないのですが、ちょっとしたコードを自作してみました。
コード
ボタンを数える(ButtonCounter.cs)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // rootObjects にあるすべてのボタンを登録する public class ButtonCounter : MonoBehaviour { [Header("走査するオブジェクト")] [SerializeField] List<GameObject> rootObjects; [Header("全ボタン 自動更新")] public List<Button> list = new List<Button>(); // 単純な右手法による検索 void CheckChild( Transform transform ) { // ボタンあれば登録 Button button = transform.gameObject.GetComponent<Button>(); if( button != null ){ list.Add( button ); } // 子オブジェクトを検索 for( int i = 0; i < transform.childCount; i++ ){ Transform child = transform.GetChild(i); CheckChild( child ); } } // 更新 public void UpdateAll() { // 初期化 list.Clear(); // 全登録 for( int i = 0; i < rootObjects.Count; i++ ){ Transform child = rootObjects[i].transform; CheckChild( child ); } } }
一括更新ボタン(ButtonCounterWrapperEditor.cs)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; // ButtonCounter ボタンリスト一括更新ボタン [CustomEditor(typeof(ButtonCounter))] public class ButtonCounterWrapper : Editor { // Inspector の GUI を更新 public override void OnInspectorGUI(){ // Debug.Log("OnInspectorGUI"); //元のInspector部分を表示 base.OnInspectorGUI(); // ボタンが押されたら全部入れ替える if (GUILayout.Button("ボタン一覧更新")){ Debug.Log("ボタンを押された"); ButtonCounter2 counter = target as ButtonCounter2; counter.UpdateAll(); } } }
エディタ拡張を使用します。Editor拡張クラスはEditorフォルダ内に格納します。
動作例
ボタンを走査するオブジェクトを登録して、一括更新ボタンを押すと、オブジェクト配下の全部のボタンを拾ってくれます。
登録するオブジェクトは複数選択できます。
(参考)エディタ拡張:カスタムボタンの追加(いつもお世話になっております)
kan-kikuchi.hatenablog.com
(以上)