はじめに
クラスや変数に追加で情報を加えることができる便利な機能「属性」についてまとめました。
インスペクター拡張関連
属性 | 機能 | 書式 |
---|---|---|
SerializeField | 変数をシリアライズする | [SerializeField] |
NonSerialized | 変数をシリアライズしない | [NonSerialized] |
HideInInspector | インスペクターに表示しない | [HideInInspector] |
Range | 変数に範囲を指定 | [Range(最小, 最大)] |
Header | 変数にヘッダーを追加 | [Header(“ヘッダー名”)] |
Tooltip | カーソルを合わせるとツールチップを表示 | [Tooltip(“説明文”)] |
Space | パラメータ間にスペースを空ける | [Space(幅)] |
TextArea | スクロールバー付きのテキストボックスを表示 | [TextArea] |
SerializeField
変数がシリアライズされます。private修飾子をつけていてもインスペクターに表示されるようになります。
[SerializeField]
private int param01;
表示結果
NonSerialized
SerializeFieldの逆バージョンとしてNonSerializedという属性もあります。これは変数をシリアライズせず、インスペクターにも表示しないための属性です。
[NonSerialized]
private int param02;
表示結果
param02がインスペクター上に表示されていないことがわかると思います。
HideInInspector
シリアライズの有無、public修飾子をつけた状態でも関係なくインスペクターに表示しないようにする属性です。
[HideInInspector]
public int param03;
表示結果
こちらもparam03がインスペクター上に表示されなくなりました。
Range
範囲制限つきのスライダーで表示させる属性です。float型とint型の変数に使うことができ、インスペクター上で意図しない値の入力を防ぐことができます。
[Range(0, 100)]
public int param04;
表示結果
Header
変数名の上にヘッダーを表示させることができます。
[Header("ヘッダー名")]
public int param05;
表示結果
Tooltip
マウスカーソルをインスペクターの項目名に合わせたときにツールチップを表示します。補助的に説明を表示させたいときに使います。
[Tooltip("ツールチップ")]
public int param06;
表示結果
Space
インスペクターの項目同士の間隔をとるための属性です。
[Space(10)]
public int param07;
表示結果
param06とparam07の間にスペースができました。これでパラメータが見やすくなります。
TextArea
複数行のテキスト入力フィールドを表示させます。
[TextArea]
public string param07;
表示結果
コンポーネント関連
属性 | 機能 | 書式 |
---|---|---|
RequireComponent | コンポーネントの自動追加、取り外し不可 | [RequireComponent(typeof(コンポーネント))] |
CreateAssetMenu | メニューからアセットを生成 | [CreateAssetMenu(メニュー名,ファイル名,表示順序)] |
RequireComponent
このtest.csをゲームオブジェクトにアタッチしたときにこの場合はRigidbodyが自動で追加されます。自動で追加されたコンポーネントは取り外しができないようになるので消してはいけないコンポーネントの削除防止にもなります。
[RequireComponent(typeof(Rigidbody))]
public class test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
CreateAssetMenu
この属性を追加するとAssets→Createメニューの下に指定したメニュー名でアセットを作成することができます。
主にScriptableObjectの作成、Editorの作成で使用すると思います。
[CreateAssetMenu(menuName = "MENU", fileName = "test")]
public class test : ScriptableObject
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
表示結果
Createメニューの上の方にMENUと書かれた項目が追加されました。
まとめ
いかがでしたか?この属性をいくつか知っているだけでもUnityでの開発がとても便利になると思います。