Unity Inspector에서 열거형 목록을 동적으로 표시

6846 단어 C#Unity
Dictionary에 추가된 Key나 요소를 인스펙터상에 "열거형"으로서 표시하기 위한 스크립트입니다. Dictionary는 Seiralize 할 수 없으므로 Inspector에서 내용을 확인할 수 없습니다.

단지 내용을 표시하는 것만으로는 Debug.log에서 상관없습니다만, 요소에 delegate형등을 지정해 「key에 응한 무엇인가의 동작의 체크를 실시하고 싶다」경우, 인스펙터에 GUILayout.Button로 모든 키를 작성하는 것은 매우 어렵습니다.
거기서 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






여기에서는 Dictionary의 내용을 표시하고 있을 뿐입니다만, 본래의 목적은 에디터에서의 동작 확인을 간단하게 하기 위한 스크립트입니다.

좋은 웹페이지 즐겨찾기