[筆記] Unity 中常用的 Attribute - Some Common and Useful Unity Attribute
Attribute 是 C# 的一個功能,更是在 Unity 中很方便的一個部分,可以用於強化 C# script 腳本與 Unity Editor 場景編輯器的互動。
善用 Attribute 可以讓 Editor 更方便的改動 Component 參數 (更加客製化的改動介面)、避開錯誤的參數設定 (超出數值範圍、不該改動的數值等),或者添加全新的功能在 Editor 中等。
本文紀錄許多我常用的、方便的 Attribute,皆是 Unity 內建,直接可以使用。
Inspector 參數欄位顯示
- [HideInInspector]
- 將 public 變數從 Inspector 上隱藏。
- [SerializeField]
- 將 private 變數顯示在 Inspector 上。
- 註:本來的用意是序列化 (serialize) 變數成為可在 Inspector 編輯的參數,不過 Unity 本來就會對 public 變數執行序列化,所以通常會用於強制序列化 private 變數。
1 | [public int m_HideNumber; ] |
Inspector 參數欄位修飾
- [Range(float, float)]
- 限制 int 或者 float 變數的範圍,並增加一個拉桿 UI。
- [Multiline]
- 讓 string 的填寫欄位變成多行。
- [TextArea]
- 讓 string 的填寫欄位變成多行。
- 註:Multiline 與 TextArea 的差別,除了顯示的介面不同之外,前者是可以設定輸入框的行數;後者則是可以設定一個範圍,讓輸入框的高度隨內容彈性調整。
1 | [public int m_RangeInt; ] |
在 Inspector 加上額外資訊
- [Header(string)]
- 顯示 Header 文字。
- [Tooltip(string)]
- 當滑鼠移動到參數欄位上時,會顯示說明文字。
1 | [ ] |
Component 修飾
- [RequireComponent (typeof (ComponentType))]
- 要求同一物件必須要有指定的 Component 存在。
- [DisallowMultipleComponent]
- 限制一個物件只能擁有一個此 Component。
- [AddComponentMenu(string)]
- 讓自己撰寫的 Component 腳本,出現在 “Add Component” 選單中。
- [ExecuteInEditMode]
- 本來 Update() 等 message 接收函式只會在 Play Mode (遊戲執行中) 才有動作,加上這個 Attribute 則可以在 Editor Mode (編輯器中) 運用 Update() 等部分函式。
- 官方文件:https://docs.unity3d.com/ScriptReference/ExecuteInEditMode.html
1 | [ ] |
類別 (Class) / 結構 (Struct) 修飾
- [System.Serializable]
- 將類別 (class) 或結構 (struct) 設定成 Serializable 的型別,則可以被 Unity 自動序列化顯示於 Inspector 上,或者使用 [SerializeField] 強制序列化顯示。
1 | [public class SerializableClass { ] |
額外說明
更多的內建 Attribute 說明可以在這個網頁中找到:
- UnityのAttribute(属性)についてまとめてメモる。 - http://tsubakit1.hateblo.jp/entry/2015/01/03/203843
除了使用 Unity 內建 Attribute 來強化腳本,Unity 也可以自行設計增加 Attribute,客製化所需的功能。