Unity Editor の拡張機能には,ドロップダウンメニューの作成方法が複数用意されています。
このドロップダウンメニューには独自の仕様があり,水平罫線を加える事も出来ます。
本稿では,その方法について御説明いたします。
(Unity 2018.3.0f2)
EditorGUILayout.Popup
今回は,こちらの関数で確認します。
文字列配列string[]
から項目を選択し,配列のインデックス番号int
を返します。
(もちろん,ToString()
関数によって文字列string
を取得する事も出来ます。)
using UnityEngine; // ここからエディター上でのみ有効 #if UNITY_EDITOR using UnityEditor; // エディター拡張クラス [CustomEditor(typeof(Extend))] public class ExtendedEditor : Editor {// Editor クラスを継承 // Extend クラスの変数を扱うために宣言 Extend extend; void OnEnable() {// 最初に実行 // Extend クラスに target を代入 extend = (Extend)target; } public override void OnInspectorGUI() {// Inspector に表示 // これ以降の要素に関してエディタによる変更を記録 EditorGUI.BeginChangeCheck(); // ラベルの作成 var label = "List"; // 初期値として表示する項目のインデックス番号 var selectedIndex = extend.index; // プルダウンメニューに登録する文字列配列 var displayOptions = Extend.list; // プルダウンメニューの作成 var index = Extend.list.Length > 0 ? EditorGUILayout.Popup(label, selectedIndex, displayOptions) : -1; if (EditorGUI.EndChangeCheck()) {// 操作を Undo に登録 // Extend クラスの変更を記録 var objectToUndo = extend; // Undo メニューに表示する項目名 var name = "Extend"; // 記録準備 Undo.RecordObject(objectToUndo, name); // インデックス番号を登録 extend.index = index; } // インデックス番号をログ出力 Debug.Log(extend.index); } } // ここまでエディター上でのみ有効 #endif // 同一オブジェクトへの複数追加を禁止 [DisallowMultipleComponent] public class Extend : MonoBehaviour {// エディター拡張の中身 // リスト public static readonly string[] list = { "1", "", "2", " ", "3", " ",//半角スペース2つ "4", string.Empty, "5", null, "6", "",//重複 "7", " ",//重複 "8", string.Empty,//重複 "9", null,//重複 " ",//全角スペース "9",//重複 }; // 初期値は“9” public int index = 16; }
上記のスクリプトから生成したプルダウンメニューは,次の画像のようになります。
半角スペースのみで構成された要素,または空白文字が区切り線に変化します。
この区切り線は表示されるのみで,選択する事が出来ません。
全角スペースは,そのまま全角スペースとして項目に表示されます(見えませんが)。
重複する文字列string
要素は表示されませんが,区切り線は例外のようです。
列挙型enum
から生成するプルダウンメニューは1つしか区切り線を表示できませんでしたが,今回の方法では複数の区切り線を表示できます。
以上,プルダウンメニューに区切り線を表示する方法でした。
複数選択式プルダウンメニューの場合は,こちらの記事をお読みください。