Unityの属性(Attribute)チートシート

Unityの属性(Attribute)チートシート_アイキャッチ
目次

はじめに

クラスや変数に追加で情報を加えることができる便利な機能「属性」についてまとめました。

インスペクター拡張関連

属性機能書式
SerializeField変数をシリアライズする[SerializeField]
NonSerialized変数をシリアライズしない[NonSerialized]
HideInInspectorインスペクターに表示しない[HideInInspector]
Range変数に範囲を指定[Range(最小, 最大)]
Header変数にヘッダーを追加[Header(“ヘッダー名”)]
Tooltipカーソルを合わせるとツールチップを表示[Tooltip(“説明文”)]
Spaceパラメータ間にスペースを空ける[Space(幅)]
TextAreaスクロールバー付きのテキストボックスを表示[TextArea]

SerializeField

変数がシリアライズされます。private修飾子をつけていてもインスペクターに表示されるようになります。

[SerializeField]
private int param01;

表示結果

パラメータ01

NonSerialized

SerializeFieldの逆バージョンとしてNonSerializedという属性もあります。これは変数をシリアライズせず、インスペクターにも表示しないための属性です。

[NonSerialized]
private int param02;

表示結果

パラメータ01,04

param02がインスペクター上に表示されていないことがわかると思います。

HideInInspector

シリアライズの有無、public修飾子をつけた状態でも関係なくインスペクターに表示しないようにする属性です。

[HideInInspector]
public int param03;

表示結果

パラメータ01,04

こちらもparam03がインスペクター上に表示されなくなりました。

Range

範囲制限つきのスライダーで表示させる属性です。float型とint型の変数に使うことができ、インスペクター上で意図しない値の入力を防ぐことができます。

[Range(0, 100)]
public int param04;

表示結果

パラメータ04

Header

変数名の上にヘッダーを表示させることができます。

[Header("ヘッダー名")]
public int param05;

表示結果

パラメータ05

Tooltip

マウスカーソルをインスペクターの項目名に合わせたときにツールチップを表示します。補助的に説明を表示させたいときに使います。

 [Tooltip("ツールチップ")]
 public int param06;

表示結果

パラメータ06,07

Space

インスペクターの項目同士の間隔をとるための属性です。

[Space(10)]
public int param07;

表示結果

パラメータ06,07ツールチップなし

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での開発がとても便利になると思います。

目次