属性のまとめ
属性(attribute)とはクラスやメンバーに追加情報を与えるものです。
AddComponentMenu
AddComponentのメニューからスクリプトを追加できるようになります。

[AddComponentMenu("Custom/XXXXX")] public class AttributeTest : MonoBehaviour { }
ColorUsageAttribute
色をColorFieldとColor Pickerを使用して構成するために使用する属性です。
インスペクターでHDRのカラーを調整したい場合に便利です。

[ColorUsage(false, true)] public Color color; private void Start() { }
ContextMenu
コンテキストメニューから関数を実行することができます。
下記画像のようにスクリプトの右上にある歯車アイコンから関数を実行できます。

private void Start() { } // コンテキストメニューから関数を実行する [ContextMenu("この名前でコンテキストメニューに追加する")] private void TestFunction() { }
ContextMenuItem
フィールドを右クリックして任意の関数を実行することができます。
変数の値を右クリックでリセットしたい等に便利です。

// フィールドを右クリックで関数実行 [ContextMenuItem("リセット", "TestFunction")] public int number = 50; private void Start() { } private void TestFunction() { number = 0; }
DisallowMultipleComponent
GameObjectに2つ以上のコンポーネントをアタッチできないようにします。
(他のコンポーネントが2つ以上追加できないようになるわけではありません)

// このスクリプトを同じゲームオブジェクトに2つ以上追加できないようにします。 [DisallowMultipleComponent] public class AttributeTest : MonoBehaviour { private void Start() { } }
ExecuteInEditMode
ゲームを実行していなくても関数が実行されます。
Update関数は、常に実行されるわけではなく、シーン何に何か変化があったときのみ実行されるので注意が必要です。
常に実行させたい場合は、OnRenderObject関数を使用すると良いです。
// プレイモードでない場合でも実行されます [ExecuteInEditMode] public class AttributeTest : MonoBehaviour { private void Start() { } // シーン内の何かが変化したときにのみ呼び出されます。 private void Update() { Debug.Log("Update"); } // シーンビューまたはゲームビューのすべての再描画で呼び出されます。 private void OnRenderObject() { Debug.Log("OnRenderObject"); } }
HeaderAttribute
変数名の頭に説明文を追加できます。

[Header("名前")] public string name1; public string name2; private void Start() { }
HelpURL
コンポーネントのヘルプアイコン(下記画像参照)をクリックすると任意のURLを表示します。

// ヘルプアイコンでURLに飛びます [HelpURL("https://nopitech.com/?p=981&preview=true")] public class AttributeTest : MonoBehaviour { }
HideInInspector
public 変数はインスペクター上に表示されますが、
非表示にしたい場合に使います。
// インスペクターで見えないように [HideInInspector] public int hp; void Start() { }
Multiline
複数行のテキストフィールドを表示します。

// 複数行文字列 [Multiline] public string text1; [Multiline(10)] public string text2; void Start() { }
Range
int型やfloat型の値をインスペクター上からスライダーで操作できます。

// スライダーで変数いじれる [Range(0, 100)] public int slider; void Start() { }
RequireComponent
スクリプトアタッチ時に、強制的に必要なコンポーネントがアタッチされます。
下記ソースだと、スクリプトアタッチ時に、RigidbodyとBoxColliderが自動的に割り当てられます。
// 強制的にコンポーネントがアタッチされる [RequireComponent(typeof(Rigidbody), typeof(BoxCollider))] public class AttributeTest : MonoBehaviour { void Start() { } }
RuntimeInitializeOnLoadMethod
Awakeの次に呼び出されるっぽいです。
staticにしてれば呼び出さなくても勝手に呼び出してくれるらしい。
使いどころは正直よくわかってないです。Awakeより後に初期化したいけど
Startよりは前であってほしいときに使う?

public class AttributeTest : MonoBehaviour { void Awake() { Debug.Log("Awake"); } void Start() { Debug.Log("Start"); } [RuntimeInitializeOnLoadMethod] static void OnSecondRuntimeMethod() { Debug.Log("RuntimeInitializeOnLoadMethod"); } }
SelectionBase
シーンビューで親子になっているオブジェクトの「子」を選択しても
「子」が選択されます。
プレハブ化しているときは親子になっているオブジェクトの子を選択しても、
ルートのオブジェクトが選択されてしまいますが、この属性が付与されていると
一発で選択できるようになります。
// プレハブ化したときに選択してもこのオブジェクトが選択される [SelectionBase] public class AttributeTest : MonoBehaviour { void Start() { } }
Space
インスペクターにスペースを入れます。

public int hp; public int mp; [Space(10)] public int slashDamage; public int blowDamage; void Start() { }
TextArea
スクロールできるテキストエリアを作ります。

[TextArea] public string textArea1; // 最大行、最少行を指定できます [TextArea(3, 10)] public string textArea2; void Start() { }
Tooltip
インスペクターの変数にマウスオーバーすると
変数に説明テキストを表示できます。

[Tooltip("現在のヒットポイント")] public int hp; void Start() { }
コメント