關於Unity編輯器拓展的一些小技巧


首先:對於編輯器拓展的腳本都應該放在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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM