皆さん、こんにちは!SAT-BOXのカメです。
ここ最近は暖かくなってきて春の訪れを感じますね。
今回はUnityのスクリプトでC#コードを書くときに、変数のインスペクター上での表示を変更する「PropertyAttribute」について気になったことを紹介します。
Unityではスクリプト変数にカスタム属性を与えて、インスペクター上にコメントの記入や、スペースを開けたりと様々な効果を付けられます。
さて気になったのは、項目ごとの見出しを付けようと[Header]のみ記述してコメント用の行を作ろうとした時の話です。
画像の見た目のものを作ろうとしたときに、以下のコードを書きました。
//これは間違ったコードです
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」の後ろに来てしまいました。
//こちらのコードで作りたかった見た目になります
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は後ろで定義したものから表示されるようなので、この書き方になります。
作業効率化や間違い防止の為、インスペクターは見やすい作りにしたいですね。
以上、カメでした。