LoginSignup
0
0

More than 1 year has passed since last update.

Unityのインスペクター上で列挙型リストを動的に表示する

Last updated at Posted at 2021-10-11

Dictionaryに追加されたKeyや要素をインスペクター上に"列挙型"として表示するためのスクリプトです。DictionaryはSeiralizeできないので、インスペクター上で内容を確認することはできません。

ただ内容を表示するだけならDebug.logで構わないのですが、要素にdelegate型等を指定して「keyに応じたなにかしらの動作のチェックを行いたい」場合、インスペクターにGUILayout.Buttonで全てのkeyを書くのは非常に大変です。
そこでDictionaryの内容を列挙型で取得できたら非常に便利なんじゃないかと組んでみました。

InspectorEnumPopup.cs

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

qiita01.png

qiita02.png

ここではDictionaryの内容を表示しているだけですが、本来の目的はエディターでの動作確認を簡単にする為のスクリプトです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0