一、Unity Editor自定義選單
1、選單欄選單
[MenuItem("選單名稱")] public static void Method(){}// 需要執行的呼叫方法
2、可以在資源視窗右鍵顯示
MenuItem("Assets/選單名稱", false, 61)]
3、可以在Project視窗物件右鍵選單呼叫,又可以在Hierarchy視窗物件右鍵選單呼叫
MenuItem("GameObject/Create Other/選單名稱")
4、既可以在資源視窗右鍵呼叫,又可以在Hierarchy視窗的物件上右鍵呼叫
[MenuItem("GameObject/Create Other/選單名稱"), MenuItem("Assets/選單名稱", false, 61)]
5、元件選單,可以為選中物件新增元件
[AddComponentMenu("元件選單名稱", 9)] public class ComExtension : Component{}
以下內容為轉載:
作者:勥小透明 來源:CSDN 原文:https://blog.csdn.net/WPAPA/article/details/51066397?utm_source=copy
6、MenuItem選單的先後排序:
雖然我們在寫程式碼的時候是 item2 在前,但是我們在設定順序時給它設的是2,所以最後顯示的時候,則是1在前,2在後
[MenuItem("MenuItem/MenuItem2", false, 2)] private static void MenuItemFunc2() { Debug.Log("MenuItemFunc2"); } [MenuItem("MenuItem/MenuItem1", false, 1)] private static void MenuItemFunc1() { Debug.Log("MenuItemFunc1"); }
7、MenuItem與快捷鍵進行關聯:
[MenuItem("MenuItem/快捷鍵1 _%#&_HOME")] private static void MenuItemFunc3() { Debug.Log("MenuItemFunc3"); } [MenuItem("MenuItem/快捷鍵2 _%#&_LEFT")] private static void MenuItemFunc4() { Debug.Log("MenuItemFunc4"); }
如圖所示,這2個item選項跟快捷鍵關聯起來了,可以直接使用快捷鍵來呼叫。
規則是:
% = ctrl
# = Shift
& = Alt
LEFT/RIGHT/UP/DOWN = 上下左右
F1…F2 = F...
HOME, END, PGUP, PGDN = 鍵盤上的特殊功能鍵
特別注意的是,如果是鍵盤上的普通按鍵,比如a~z
,則要寫成_a ~ _z
這種帶_字首的。
8、選中的不是指定型別的物件,選單項會被禁掉:
[MenuItem("MenuItem/Selected GameObject")] private static void SelectedGameObject() { Debug.Log("SelectedGameObject"); } [MenuItem("MenuItem/Selected GameObject", true)] private static bool CheckObjectType() { Object selectedObject = Selection.activeObject; if(selectedObject != null && selectedObject.GetType() == typeof(GameObject)) { return true; } return false; }
這段的意思就是,如果你沒有選中任何遊戲物件,或者你選中的不是GameObject
型別的物件時,MenuItem/Selected GameObject
選項會是被禁用的(灰色)狀態,只有選的是指定型別的選項時,才是正常的可點選狀態。
9、可以在 project 窗口裡右鍵到選單:
[MenuItem("Assets/在Project目錄裡右鍵1")] private static void Assets_right_btn1() { Debug.Log("在Project目錄裡右鍵1"); }
我們只需要把選項設定在Assets
目錄的子上,就可以在Project
窗口裡右鍵出選單了,當然也是可以有例如 Assets/Create/XXX
這樣的目錄存在。
10、在 Inspector 視窗中的指定控制元件身上右鍵到選項:
[MenuItem("CONTEXT/Rigidbody/在Rigidbody上右鍵")] private static void CONTEXT_Rigidbody_right_btn() { Debug.Log("在Rigidbody上右鍵"); }
有時候,我們想在某個控制元件上增加一些功能選單,做一些比如自動給控制元件賦值等這種功能。
思路跟上面的其實是一樣的,只不過我們這次的父換成了CONTEXT
而已。
11、通過在 GameObject/UI 選項夾裡增加選項,使選單在Hierarchy視窗中被右鍵到:
[MenuItem("GameObject/UI/在GameObject目錄裡右鍵")] private static void GameObject_right_btn() { Debug.Log("在GameObject目錄裡右鍵"); }
思路跟前面一樣,我們在 GameObject/UI/
目錄下增加了一個選項,我們發現不止在 Hierarchy 視窗中看到了它,在頂部選單欄相同的層次下也看到了它。
但是這裡有個問題就是,我們並不能夠像 GameObject/XXX
這樣,把選項放在 UI
的外面,這樣做的話,我們只會在頂部欄的 GameObject
目錄下發現那個XXX
的選項,在 Hierarchy 什麼也不會有,這點需要大家注意。
補充:還有一種在Hierarchy
視窗設定選單的方法,就是用編輯器的EditorUtility
類。
12、ContextMenu的使用十分的簡單,總共就只有2點
注意:ContextMenu
這個類建立的選項,都是基於當前它所在的整合自MonoBehaviour
的元件類的,不像 MenuItem
幾乎是一個全域性存在的選項
① 是我們在小齒輪點開的選單上,增加一個選項
② 是我們為testName
這個public
的變數單獨增加了一個右鍵選項
using UnityEngine; using System.Collections; public class TestMain : MonoBehaviour { // Use this for initialization void Start() { } // Update is called once per frame void Update() { } [ContextMenu("ContextMenu1")] public void ContextMenuFunc1() { Debug.Log("ContextMenu1"); } public int a = 0; public string b = ""; [ContextMenuItem("add testName", "ContextMenuFunc2")] public string testName = ""; private void ContextMenuFunc2() { testName = "testName"; } }
程式碼部分十分的簡單,不過有一點需要注意的地方,那就是第2個我們給變數testName
加選單的時候,一定要把[ContextMenuItem]
寫在testName
上,而不是方法private void ContextMenuFunc2()
上面,方法的呼叫靠在ContextMenuItem
上設定引數來完成。