万年素人からHackerへの道

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

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    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;
            // }
        }
    }