概要
リストや配列をインスペクター上に表示すると通常は「Element0」、「Element1」などのように表示されるがこの表示を変えられないかと考え、エディタ拡張を行った。
プログラム例
あるクラスでの英語のテストの点数を保存するクラス「ScoreTable」を用意し、その中のリスト「scores」に点数を保存するとする。
using System.Collections.Generic; using UnityEngine; public class ScoreTable : MonoBehaviour { [SerializeField] public List<int> scores = new List<int>(3); }
次にクラス「ScoreTableEditor」を用意し、上記のクラスのエディタ拡張を行う。
using System.Collections.Generic; using UnityEngine; using UnityEditor; [CustomEditor(typeof(ScoreTable))] public class ScoreTableEditor : Editor { ScoreTable table; public override void OnInspectorGUI() { serializedObject.Update(); table = target as ScoreTable; SetScore(); serializedObject.ApplyModifiedProperties(); } static List<string> names = new List<string>(3) { "A", "B", "C" }; void SetScore() { //保存されているリストを読み込み List<int> scores = table.scores; //未設定 or namesと長さが違う場合には0で初期化 if (scores == null || scores.Count != names.Count) { scores = new List<int>(); for (int i = 0; i < names.Count; i++) scores.Add(0); } //表示 EditorGUILayout.HelpBox("英語のテストの点数", MessageType.None); for (int i = 0; i < names.Count; i++) { scores[i] = EditorGUILayout.IntField(names[i], scores[i], GUILayout.MinWidth(400)); } //入力した値を元のリストに渡す table.scores = scores; } }