[筆記] 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
2
3
4
[HideInInspector] public int m_HideNumber;
public int m_Number;
[SerializeField] private string m_SerializeText;
private string m_Text;

attribute1

Inspector 參數欄位修飾

  • [Range(float, float)]
    • 限制 int 或者 float 變數的範圍,並增加一個拉桿 UI。
  • [Multiline]
    • 讓 string 的填寫欄位變成多行。
  • [TextArea]
    • 讓 string 的填寫欄位變成多行。
    • 註:Multiline 與 TextArea 的差別,除了顯示的介面不同之外,前者是可以設定輸入框的行數;後者則是可以設定一個範圍,讓輸入框的高度隨內容彈性調整。
1
2
3
[Range(0, 4)] public int m_RangeInt;
[Multiline(3)] public string m_MultilineText;
[TextArea(3, 5)] public string m_TextAreaText;

attribute2

在 Inspector 加上額外資訊

  • [Header(string)]
    • 顯示 Header 文字。
  • [Tooltip(string)]
    • 當滑鼠移動到參數欄位上時,會顯示說明文字。
1
2
3
[Header("This is Header")]
[Tooltip("This is Tooltip")]
public string m_HasTooltip;

attribute3

Component 修飾

  • [RequireComponent (typeof (ComponentType))]
    • 要求同一物件必須要有指定的 Component 存在。
  • [DisallowMultipleComponent]
    • 限制一個物件只能擁有一個此 Component。
  • [AddComponentMenu(string)]
    • 讓自己撰寫的 Component 腳本,出現在 “Add Component” 選單中。
  • [ExecuteInEditMode]
1
2
[AddComponentMenu("Custom/Test/InspectorDemo")]
public class InspectorDemo : MonoBehaviour { }

attribute4

類別 (Class) / 結構 (Struct) 修飾

  • [System.Serializable]
    • 將類別 (class) 或結構 (struct) 設定成 Serializable 的型別,則可以被 Unity 自動序列化顯示於 Inspector 上,或者使用 [SerializeField] 強制序列化顯示。
1
2
3
4
5
[System.Serializable] public class SerializableClass {
public int NumberInClass;
public string StringInClass;
}
public SerializableClass m_SerializableClass;

attribute5

額外說明

更多的內建 Attribute 說明可以在這個網頁中找到:

除了使用 Unity 內建 Attribute 來強化腳本,Unity 也可以自行設計增加 Attribute,客製化所需的功能。