首先:對於編輯器拓展的腳本都應該放在Assets/Editor文件夾下
然后根據需要實現相對應的方法:
1.實現簡單菜單欄按鈕觸發
1 //Unity上方菜單欄添加自定義按鈕觸發方法 2 [MenuItem("MochaTools/DoMenuEvent")] 3 static void DoMenuEvent() 4 { 5 Debug.Log("DoMenuEvent"); 6 }
2.菜單欄按鈕觸發的方法拓展(此處舉例:當選中游戲物體時按鈕啟用,未選中任何游戲物體時按鈕至灰色棄用)
1 //Unity上方已經存在的菜單欄添加自定義按鈕觸發方法 2 //其中參數為(1.菜單按鈕名 2.判斷當前按鈕功能是否啟用3.所處的層級,越低顯示越靠前,默認為1000) 3 //所以想要在Hierarchy面板上右鍵添加功能,在GameObject目錄下將層級添加靠前即可 4 //所以想要在Project面板上右鍵添加功能,在Assets目錄下將層級添加即可 5 [MenuItem("GameObject/DoHaveMenuEvent",true,1)] 6 static bool DoHaveMenuEventJudge() //同目錄不同方法名 7 { 8 //這里設置條件返回true則同目錄下的按鈕才執行,返回false則同目錄下的按鈕至灰 9 if (Selection.objects.Length > 0) return true; 10 else return false; 11 } 12 [MenuItem("GameObject/DoHaveMenuEvent", false, 1)] 13 static void DoHaveMenuEvent() 14 { 15 Debug.Log("DoHaveMenuEvent"); 16 }
3.當同一層級下的按鈕層次相差10以上時,菜單欄按鈕間形成直線分割樣式
1 //當相鄰兩個菜單欄按鈕之間的層級相差10以上時,會出現一條分割線 2 [MenuItem("MochaTools/DoMenuEvent1",false ,0)] 3 static void DoMenuEvent1() 4 { 5 Debug.Log("DoMenuEvent1"); 6 } 7 [MenuItem("MochaTools/DoMenuEvent2", false, 11)] 8 static void DoMenuEvent2() 9 { 10 Debug.Log("DoMenuEvent2"); 11 }
4.對掛載在游戲物體身上的組件添加右鍵按鈕
1 //對掛載在游戲物體身上的組件(系統組件或掛載的腳本)進行右鍵菜單添加操作功能按鈕 2 //CONTEXT(CONTEXT必須全大寫)/組件名/右鍵出來的方法名 3 [MenuItem("CONTEXT/Transform/DoComponentEvent")] 4 static void DoComponentEvent(MenuCommand cmd) //參數cmd:包含該組件的數據信息用cmd.context表示 5 { 6 //測試使用方法 7 //獲取該組件 8 Transform tTransform = cmd.context as Transform; 9 //設置該組件位置 10 tTransform.position = Vector3.one; 11 }
5.對物體的選中(單個或多個)操作
1 //選中單個游戲物體並進行操作 2 [MenuItem("MochaTools/DoMenuEvent3")] 3 static void DoMenuEvent3() 4 { 5 //Selection.activeGameObject只對Hierarchy面板中選中的物體有效 6 //如果選中多個,則以第一個選中的游戲物體為准 7 Transform tTransform = Selection.activeGameObject.transform; 8 9 Debug.Log(tTransform.name); 10 } 11 12 //選中多個游戲物體並進行操作 13 [MenuItem("MochaTools/DoMenuEvent4")] 14 static void DoMenuEvent4() 15 { 16 //Selection.objects對Hierarchy面板中選中的物體以及Project面板下的預制體有效 17 //如果選中多個,則以第一個選中的游戲物體為准 18 Object[] tObjs= Selection.objects; 19 for (int i = 0; i < tObjs.Length; i++) 20 { 21 Debug.Log(tObjs[i].name ); 22 } 23 }
6.對選中的游戲物體進行刪除操作
1 //刪除選中的多個游戲物體(必須用DestroyImmediate,而不能用Destory) 2 //只能在Hierarchy面板上進行刪除撤銷,對預制體進行操作會報錯崩潰 3 //選中多個游戲物體並進行操作 4 [MenuItem("MochaTools/DoMenuEvent5")] 5 static void DoMenuEvent5() 6 { 7 //Selection.objects對Hierarchy面板中選中的物體以及Project面板下的預制體有效 8 //如果選中多個,則以第一個選中的游戲物體為准 9 Object[] tObjs = Selection.objects; 10 for (int i = 0; i < tObjs.Length; i++) 11 { 12 //刪除不可撤銷 13 //GameObject.DestroyImmediate(tObjs[i]); 14 //利用Undo進行的刪除可以Ctrl+Z撤銷回來 15 Undo.DestroyObjectImmediate(tObjs[i]); 16 } 17 }
7.對菜單欄按鈕添加快捷鍵
1 //為菜單欄按鈕添加快捷鍵 2 //在名字后面添加(大小寫無關) 3 //1.如果為單鍵位則添加 空格_鍵位 eg: _t 4 //2.如果為組合件則添加 空格組合件轉碼鍵位 eg:Ctrl+Q 即%q 5 //組合件轉碼 %=Ctrl #=Shift &=Alt 6 [MenuItem("MochaTools/DoMenuEvent6 %Q")] 7 static void DoMenuEvent6() 8 { 9 Debug.Log("DoMenuEvent6"); 10 }
8.對自定義腳本的右鍵添加方法,以及腳本中屬性的右鍵添加方法
1 /************************************************* 2 * 項目名稱:Unity編輯器拓展 3 * 腳本創建人:魔卡 4 * 腳本創建時間:2017.12.18 5 * 腳本功能:測試腳本 6 * ***********************************************/ 7 using System.Collections; 8 using System.Collections.Generic; 9 using UnityEngine; 10 11 //測試腳本類 12 public class TempScriptsByMocha : MonoBehaviour 13 { 14 [ContextMenuItem( "加血","AddHp")] //屬性右鍵按鈕方法 參數:1.右鍵按鈕名字 2.觸發的方法 15 public int m_hp = 10; 16 17 [ContextMenu( "AddHp")] //腳本右鍵方法 參數:右鍵按鈕名字 18 void AddHp() 19 { 20 m_hp += 20; 21 } 22 23 24 }