万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

EditorWindowで独自クラスの配列を行う C# Editor

Hoge[] hoges をEditorWindowで出したい。

using UnityEngine;
using UnityEditor;

public class MyEditor : EditorWindow
{
    [System.Serializable] // 必須.
    class Hoge
    {
        public bool boolHoge;
        public int intHoge;
        public string strHoge;
    }

    [SerializeField] // 必須.
    Hoge[] hoges = new Hoge[]
    {
        new Hoge
        {
            boolHoge = false,
            intHoge = 1,
            strHoge = "2",
        },
    }

    void OnGUI ()
    {
        ScriptableObject target = this;
        SerializedObject so = new SerializedObject(target);
        // 上のプロパティを文字列で指定する.
        SerializedProperty stringsProperty = so.FindProperty("hoges");
        // trueは子の表示.
        EditorGUILayout.PropertyField(stringsProperty, true);
        // 変更の記憶.
        so.ApplyModifiedProperties();
        // 実行はできるが、ダメ.
        // foreachだとiterateしたもの自身に代入になるのでそもそもダメ.
        // for(var i=0; i < this.hoges.Length; i++)
        // {
        //  this.hoges[i] = EditorGUILayout.ObjectField("ラベル", this.drops[i], typeof(Hoge), true) as Hoge;
        // }
    }
}