Unity3D - 自定義選單與工具列

在專案過程中有時候也許需要處理重複繁瑣的添加腳本動作,或是需要一個自動化的生成腳本

也或是程式碼又髒又雜,需要乾淨易懂的選單輔助你的心情愉悅

這邊簡單紀錄一些能增快處理效率與心情(x)的一些Editor功能

自訂工具列選項:AddComponentMenu

其實平常我們只要新增一個程序腳本,Unity IDE會自動幫你在上方工具列中追加對應的選單選項

你可以在Component>Scripts中找到自己新增的腳本,接下來我們舉上方的EasyCreate.cs為例

如果你想要在選單裡面追加自己對於腳本的分類,你可以在開啟腳本的類別上方追加下面這行程式碼片段

[AddComponentMenu("想要新增的選單名稱/更細分的分類名稱1/更細分的分類名稱2")]

橘字的部分你可以想像成你自己定義的選單路徑,中間"/"跟Windows

這樣舉我自己輸入的 "Test/Demo/Show" 為例,他就會出現在原先IDE幫我們自己產生的選單下,出現一個新的三層選單

要注意的地方有三點:

  1. 必須是繼承MonoBehaviour的腳本
  2. 中文或是全形英文可以編譯成功但是不會有選單出現的改變
  3. 如果使用了其他已經存在在工具列的路徑名稱,自訂選單出現的位置會合併到該路徑底下, 舉 "UI/Demo/Show" 為例,我們設定的路徑就會出現在UI底下

設定添加腳本的時候自動追加所需組件 : RequireComponent

有時候我們可能會為了滿足一些需求而在把我們自行撰寫的腳本掛到GameObject 上之後,還需要再追加其他組件

反反覆覆令人心癢難耐感到永無天日的漫長覺得作業冗長,這時候你可以試著在腳本的類別前方一樣追加另一個函式 

 [RequireComponent (typeof (Rigidbody))]                          

在RequireComponent()中的參數是用來指定要追加的組件類別,在這邊你可以直接輸入內建的組件類別名稱,或是自己創建的腳本名稱

比較值得注意的是, 如果你是在掛載之後才追加這行程式碼,那基本上是不會自動添加你需要的組件的,要小心

自訂工具列選單 : MenuItem

如果前面兩種都滿足不了你作為懶人專業開發上的需求

你也可以在工具列上自定義選單甚至快捷鍵

什麼?跟第一種很像?基本上他是用來對應到靜態方法作為使用,而且不需掛載到GameObject上

他可以根據追加的時候的情境設定更多的動作行為,並且需要引用 using UnityEditor才能使用

基本上設定快捷鍵的方式需要依照預設好的規則使用相對應的符號及對應的字母鍵使用

  1. Ctrl       : % (ctrl on Windows, cmd on OS X)
  2. Shift     :  # 
  3. Alt        :  & 
  4. 其他按鍵則是可以直接對應

舉假設要設定一個路徑為"UI/Demo/Show",快捷鍵為Shift + A的腳本方法,你可以在腳本的類別方法前方加上

[MenuItem ("UI/Demo/Show #a")]
  1. 其中路徑之間可以擁有空白,作為要使用的快捷鍵組合則是必須寫在字串的最後放並用空白鍵與路徑間隔
  2. 引用MenuItem的腳本必須放在Editor底下而非Scripts,否則發佈時會出錯
  3. 不能跟一般掛載到遊戲物件的程式混用

理論上將腳本再次儲存並編譯(Mono內 Cmd + b)就可以在工具列上直接看到我們自己定義的選單路徑出現在上面了

做個測試

    [MenuItem ("UI/Demo/Show #a")]
	static void hello(){
		Debug.Log("Hello");
	}

讓我們按下Shift + A的按鍵組合,就會在Console視圖裡看見我們的除錯訊息顯示Hello
這個方法能讓開發變得更方便簡單,但記得引用此方法實作時執行的方法一定要為Static的靜態方法,且腳本放置於Editor

至於能怎麼樣實現更多功能可行性

你可以參考這幾篇文章,包含官方說明

 

本篇同步刊登於 柯特的日常筆記