Unityのインスペクター上で列挙型リストを動的に表示する
Dictionaryに追加されたKeyや要素をインスペクター上に"列挙型"として表示するためのスクリプトです。DictionaryはSeiralizeできないので、インスペクター上で内容を確認することはできません。
ただ内容を表示するだけならDebug.logで構わないのですが、要素にdelegate型等を指定して「keyに応じたなにかしらの動作のチェックを行いたい」場合、インスペクターにGUILayout.Buttonで全てのkeyを書くのは非常に大変です。
そこでDictionaryの内容を列挙型で取得できたら非常に便利なんじゃないかと組んでみました。
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEditor;
public class InspectorEnumPopup : MonoBehaviour
{
public Dictionary<string, string> Dic = new Dictionary<string, string>();
void Start()
{
Dic.Add("Hello", "こんにちわ");
Dic.Add("Bye", "さようなら");
}
}
#if UNITY_EDITOR
//CustomEditor
[CustomEditor(typeof(InspectorEnumPopup))]
public class InspectorEnumPopupCustom : Editor
{
private string[] EnumList = new string[] { "None" };
private int Idx = 0;
private InspectorEnumPopup Content;
public void EnumUpdate()
{
EnumList = Content.Dic.Keys.ToArray();
}
public override void OnInspectorGUI()
{
Content = target as InspectorEnumPopup;
base.OnInspectorGUI();
Idx = EditorGUILayout.Popup("List", Idx, EnumList);
if (GUILayout.Button("Enum.Update"))
{
if (Application.isPlaying)
{
EnumUpdate();
}
}
if (GUILayout.Button("Check Dictionary"))
{
if (Application.isPlaying)
{
Debug.Log("Key:" + EnumList[Idx] + " Element:" + Content.Dic[EnumList[Idx]]);
}
}
}
}
#endif
ここではDictionaryの内容を表示しているだけですが、本来の目的はエディターでの動作確認を簡単にする為のスクリプトです。
Author And Source
この問題について(Unityのインスペクター上で列挙型リストを動的に表示する), 我々は、より多くの情報をここで見つけました https://qiita.com/RYUMAGE/items/8e3becdb9a248d712591著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .