Unity Editor 基礎篇(十三):MenuItem屬性
阿新 • • 發佈:2018-12-14
MenuItem選單項
MenuItem屬性允許你新增選單項到主選單和檢視面板上下文選單。
(該屬性把任意靜態函式變為一個選單命令。僅靜態函式能使用這個MenuItem屬性。)
1.為Unity新增選單項
使用方法:
MenuItem(string itemName, bool isValidateFunction, int priority)
itemName:選單名稱路徑
isValidateFunction:不寫為false,true則點選選單前就會呼叫
priority:選單項顯示排序
第一個引數為選單路徑名稱,可新增選單快捷鍵:(空格後加如下符號設定)
_w 單一的快捷鍵 W #w shift+w %w ctrl+w &w Alt+w
例如:
[MenuItem("GameObject/caymanwindow #w")]
//這樣就可以自定義快捷鍵呼叫方法,相當於點選了選單項
第三個引數為優先順序,表示上下排列的順序,小的在上,不寫則預設為1000。
例如:
[MenuItem("EamTools/T1",false,1)] static void T1() { } [MenuItem("EamTools/T2",false,2)] static void T2() { } [MenuItem("EamTools/T3",false,0)] static void T3() { }
效果:順序受引數影響了
另外,如果相鄰的兩個的priority引數值相差>=11,則認為是不同組的,中間會有線分割顯示:
[MenuItem("EamTools/T1",false,1)]
static void T1()
{
}
[MenuItem("EamTools/T2",false,12)]
static void T2()
{
}
[MenuItem("EamTools/T3",false,0)]
static void T3()
{
}
第二個引數,預設為false,設為ture則擊選單前就會呼叫 如:檢測按鈕是否要顯示(要謝兩個方法,一個引數true控制按鈕顯示,一個引數false控制點選要做的事)
[MenuItem("GameObject/caymanwindow", true)] //用於判斷按鈕什麼時候顯示
static bool ValidateSelection()
{
return Selection.activeGameObject != null;
}
[MenuItem("GameObject/caymanwindow", false)] //點選按鈕要做的事
static void Show()
{
Debug.Log("Show:"+Selection.activeGameObject.name);
}
2.為元件新增選單項
1. 使用方法:
[MenuItem("CONTEXT/元件名/顯示方法名")]
這是個固定寫法。
把“元件名“對應的指令碼掛在物體上,則這個指令碼元件右擊後顯示的上下文裡便有了這樣的選單顯示。
如:
[MenuItem("CONTEXT/Peoplr/InitMe")]
static void InitMe()
{
Debug.Log("Init");
}
有兩個變數:
context:上下文是一個選單命令的目標物件。獲取到的就是這個指令碼元件物件。
userData:傳遞自定義資訊到一個選單項的整數。
在點選選單呼叫的靜態方法中加入MenuCommand引數,點選時系統便會自動的傳入點選的指令碼物件選單進去:
[MenuItem("CONTEXT/Peoplr/InitMe")]
static void InitMe(MenuCommand cmd)
{
Peoplr po = cmd.context as Peoplr;
po.a = 5;
Debug.Log("Init");
}
然後我們獲取到指令碼元件物件,修改公開變數的值,形成初始化。
2. 還有一種方法:ContextMenu內建屬性
注意事項:
1.必須是放在 Assets / Editor 資料夾下的類,且使用了 using UnityEditor 2.呼叫的函式必須是靜態函式(static)