StructとClassをInspectorに表示させる

Unityでスクリプトを書いていく際に変数は当然使うわけですけど、項目が増えてくると煩雑になってきてパッと見では区分けしづらくなると思います。そういうときに、StructやClassでまとめて変数を管理すると、結構スッキリと整理できたりしますよね。

それで、Unityだと項目に依りけりですけど、変数の値はInspectorで設定したい項目もあるじゃないですか。でも、そのままだとスコープをPublicにしても出てきません。自分もUnity触りたての頃は何を間違えているのか、そもそもUnityのInspectorにはStructやClassは表示できないのか?とかまで思っていました。(そもそも、TransformやVector3などは確かStructなのでUnityで使えるのは当然のことでした)

では、その状況を再現してみるとこんな感じです。何も表示されませんね…。

上の画像のコードはこんな内容です。メソッドが存在しないのは気にしないでくださいw

public class SerializableInspector : MonoBehaviour {

    public struct StructData
    {
        public int m_int;
        public float m_float;
        public string m_string;
    }
    public StructData m_structData;

    public class ClassData
    {
        public int m_int;
        public float m_float;
        public string m_string;
    }
    public ClassData m_classData;

}

では、ここからひと手間を加えてStructとClassをInspectorに表示してみましょう。すると、こうなります。

ちゃんとInspetorが表示されるようになりました。では、実際に何をしたかというと、StructとClassにSystem.Serializableのアトリビュートを追加しているだけです。これを入れることによってInspectorでも扱える変数として認識されるようになるわけです。では、一応コードを載せますので参考にしてみてください。

public class SerializableInspector : MonoBehaviour
{

    [System.Serializable]
    public struct StructData
    {
        public int m_int;
        public float m_float;
        public string m_string;
    }
    public StructData m_structData;

    [System.Serializable]
    public class ClassData
    {
        public int m_int;
        public float m_float;
        public string m_string;
    }
    public ClassData m_classData;

}