unity中的常用屬性修飾符
- 一、前言
- 二、常用修飾符
- 三、結語
一、前言
在做unity開發編輯腳本的時候經常會用到屬性修飾符,使開發調試更加便捷。初學者見過最多的莫過于
[Header("標題文本")]
了吧,除此之外其實還有很多,這篇文章列舉說明一些開發常用屬性修飾符。
二、常用修飾符
在Unity中,屬性修飾符可以用于控制序列化行為、編輯器顯示和其他功能。以下是一些常用的Unity屬性修飾符及其含義:
-
[HideInInspector]
此屬性修飾符可以隱藏一個字段或屬性,使其在Inspector窗口中不可見。
-
[Range(min, max)]
限制一個數值字段或屬性的可接受值范圍。在Inspector中,這個字段會顯示為一個滑動條或輸入字段,限制在指定的最小值和最大值之間。
-
[Tooltip("提示文本")]
為Inspector中的字段或屬性添加工具提示。當用戶將鼠標懸停在字段上時,會顯示提示文本。
-
[Multiline(n)]
將字符串字段或屬性在Inspector中顯示為多行文本區域。可以指定行數,例如[Multiline(3)]
將顯示一個3行的文本區域。
-
[ SerializeField ]
使私有或受保護的字段在Inspector中可見和可序列化。
-
[Header("標題文本")]
在Inspector中添加一個標題,用于分隔和組織字段。
-
[Space]
在Inspector中添加一些空間,用于分隔字段,也可以[Space(50)]
分隔的更遠。
-
[ContextMenuItem("菜單項文本", "方法名")]
在Inspector中的字段旁邊添加一個上下文菜單項,當點擊時,會調用指定方法。
-
[TextArea(3, 10)]
與[Multiline]
類似,但它還允許指定文本區域的最小和最大行數。超過最大行數,會出現滾動條,但[Multiline]
不會出現。
-
[HelpURL("URL")]
為腳本添加一個幫助鏈接,點擊時會在瀏覽器中打開指定的URL。
這些屬性修飾符可以在Unity編輯器中提供更好的用戶體驗,并幫助組織和管理腳本中的數據。
只修飾類,一般會默認跳轉手冊文檔
-
[ContextMenu ("名稱")]
在Inspector面板中腳本Script的上下文菜單中添加一條指令,當點擊該指令時,執行對應函數。需要注意的是修飾符只能用于非靜態函數。
-
[CreateAssetMenu(fileName = "xxxx",menuName = "xxx/xxx")]
參數說明:fileName
:生成asset文件的文件名;menuName
:在Assets/Create上子菜單的名字。
這個修飾符可以通過編輯器創建自定義資產。通常用于那些繼承自ScriptableObject
的類,它可以讓開發者輕松地創建和管理配置文件、數據容器或其他可序列化的資源。
-
[ColorUsage(bool, bool, float, float, float, float)]
在Unity中,[ColorUsage]
屬性用于指定一個Color類型的字段如何在編輯器中顯示和編輯。這個屬性允許你限制顏色的編輯范圍,例如,可以指定最小的亮度、飽和度或者Alpha值。這對于那些需要特定顏色范圍的應用場景非常有用,比如光照顏色、材質顏色等。
第一個參數true
表示是否允許HDR(高動態范圍)顏色。
第二個參數true
表示是否允許顏色選擇器顯示Alpha通道。
第三個參數0f
是顏色的最小亮度值。
第四個參數8f
是顏色的最大亮度值。
第五個參數0.1f
是顏色的最小飽和度值。
第六個參數3f
是顏色的最大飽和度值。 -
[AddComponentMenu("xxx/xxx")]
該屬性是一個用于自定義腳本的特性,它允許你為腳本定義一個自定義的菜單路徑,以便在編輯器中通過Add Component
菜單添加該組件時能夠找到它。這個特性對于組織復雜的工程或者為非程序員用戶提供易于理解的組件非常有用。
-
[DisallowMultipleComponent]
防止在同一GameObject上添加同一組件的多個實例。
下面是一些不是很常見的,但是也要了解知道。
-
[Delayed]
當應用于屬性時,延遲更新屬性值,直到用戶完成輸入。這通常用于那些需要用戶輸入但不需要即時反映的場合,比如在Inspector中輸入一個值后,不需要立即看到結果,而是等到用戶完成所有輸入后再更新。
比如在這段腳本中,health
字段在Inspector中會有一個延遲更新的行為。當你開始在Inspector中編輯health
的值時,Unity不會立即應用這個新值,而是等到你完成輸入(比如按下回車鍵或點擊其他字段)后才會更新。
這個特性對于防止在用戶輸入過程中頻繁觸發的事件或計算非常有用。例如,如果你有一個復雜的計算依賴于health
的值,你不想在用戶每輸入一個數字時就執行這個計算,而是等到用戶輸入完整個數值后再執行。 -
[ExecuteInEditMode]
允許腳本在編輯模式下運行,而不僅僅是播放模式。 -
[FormerlySerializedAs("舊字段名")]
當字段名稱更改時,用于保持序列化數據的兼容性。 -
[PropertyDrawer(typeof(MyPropertyDrawer))]
自定義字段在Inspector中的顯示方式,通過指定一個實現了PropertyDrawer
類的類型。 -
[RequireComponent(typeof(ComponentType))]
自動將指定的組件添加到GameObject上,如果它尚未存在。
三、結語
雖然上面列舉了不少屬性修飾符,但是還有許多修飾符,只不過我們在開發的時候很少用到。我記得有個老師在教我的時候說過這樣一句話:沒有哪個程序員可以全部背會記住文檔,只要能夠找到會用就行,不要求全部背會記住。 是啊,文檔手冊里的東西千千萬,怎么可能把全部的東西信手拈來,熟練使用查找手冊也是一種能力。
今天的文章內容到此結束,下期見,拜拜!