名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

【Unity】PropertyAttributeの表示順について

皆さん、こんにちは!SAT-BOXのカメです。
ここ最近は暖かくなってきて春の訪れを感じますね。


今回はUnityのスクリプトC#コードを書くときに、変数のインスペクター上での表示を変更する「PropertyAttribute」について気になったことを紹介します。

Unityではスクリプト変数にカスタム属性を与えて、インスペクター上にコメントの記入や、スペースを開けたりと様々な効果を付けられます。

さて気になったのは、項目ごとの見出しを付けようと[Header]のみ記述してコメント用の行を作ろうとした時の話です。

f:id:sat-box:20220304145610p:plain

画像の見た目のものを作ろうとしたときに、以下のコードを書きました。

//これは間違ったコードです

using UnityEngine;

public class sample : MonoBehaviour
{
    [Header("---サンプルAのグループ---")]
        [SerializeField, Header("サンプルA1")] 
        private float sample_a1;

        [SerializeField, Header("サンプルA2")]
        private float sample_a2;

    [Header("---サンプルBのグループ---")]
        [SerializeField, Header("サンプルB1")] 
        private float sample_b1;

        [SerializeField, Header("サンプルB2")]
        private float sample_b2;
}

 

しかし実際の表示はこうなりました。先頭に記述したHeader「サンプルAのグループ」が、後から記述したHeader「サンプルA1」の後ろに来てしまいました。

f:id:sat-box:20220304145927p:plain

 

//こちらのコードで作りたかった見た目になります

using UnityEngine;

public class sample : MonoBehaviour
{
    [SerializeField, Header("サンプルA1")]
    [Header("---サンプルAのグループ---")]
    private float sample_a1;

    [SerializeField, Header("サンプルA2")]
    private float sample_a2;

    [SerializeField, Header("サンプルB1")]
    [Header("---サンプルBのグループ---")]
    private float sample_b1;

    [SerializeField, Header("サンプルB2")]
    private float sample_b2;
}

 

記述の順番に違和感がありますが、どうやらAttributeは後ろで定義したものから表示されるようなので、この書き方になります。

作業効率化や間違い防止の為、インスペクターは見やすい作りにしたいですね。

 

以上、カメでした。