拓展编辑器(八)_重写菜单
重寫菜單:
前面我們已經(jīng)知道了Hierarchy視圖中的菜單可以在原有基礎上拓展,同樣的我們可以徹底拋棄它的菜單項,完全使用自己的菜單項。代碼如下:
using UnityEngine; using UnityEditor;public class 重寫菜單 {[MenuItem("Window/Test/OverrideMenu1")]static void Test(){}[MenuItem("Window/Test/OverrideMenu2")]static void Test1(){}[MenuItem("Window/Test/OverrideMenu3/MO")]static void Test2(){}[InitializeOnLoadMethod]static void StartInitializeOnLoadMethod(){EditorApplication.hierarchyWindowItemOnGUI += OnHierachyGUI;}static void OnHierachyGUI(int instanceID, Rect selectionRect){if (Event.current != null && selectionRect.Contains(Event.current.mousePosition)&& Event.current.button == 1 && Event.current.type <= EventType.MouseUp) {GameObject selectionGameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;//這里可以判斷selectionGameObject的條件if (selectionGameObject){Vector2 mousePosition = Event.current.mousePosition;EditorUtility.DisplayPopupMenu(new Rect(mousePosition.x, mousePosition.y, 0, 0), "Window/Test", null);Event.current.Use();}}} }在上述代碼中使用Event.current來獲取當前的事件。當監(jiān)聽到鼠標抬起的事件后,并滿足游戲?qū)ο蟮倪x中狀態(tài),開始執(zhí)行自定義事件。其中,EditorUtility.DisplayPopupMenu用于彈出自定義的菜單,Event.current.Use()的含義是不再執(zhí)行原有的操作,所以就實現(xiàn)了重寫菜單。
效果如圖所示:
我們先用鼠標選擇一個游戲?qū)ο?#xff0c;點擊右鍵即可彈出我們的重寫菜單,這個菜單項已經(jīng)和Unity自帶的完全不一樣了,它的工作原理就是上述代碼的監(jiān)聽點擊的事件,打開一個新的菜單窗口。
除此之外,Hierarchy視圖還可以重寫系統(tǒng)自帶的菜單行為。例如,我們可以腹瀉Unity創(chuàng)建的Image組建,代碼如下所示:
using UnityEngine; using UnityEditor; using UnityEngine.UI;public class 重寫Image組建 {[MenuItem("GameObject/UI/Image")]static void CreatImage(){if (Selection.activeTransform){Image image = new GameObject("image").AddComponent<Image>();image.raycastTarget = false;image.transform.SetParent(Selection.activeTransform, false);//設置選中狀態(tài)Selection.activeTransform = image.transform;}}}由于重寫了菜單,所以需要通過腳本自行創(chuàng)建Image對象和組建。接著,獲取到image組件對象,這屆設置它的RaycastTarget屬性即可(關于RaycastTarget:UI事件會在EventSystem在Update的Process觸發(fā)。UGUI會遍歷屏幕中所有RaycastTarget是true的UI,接著就會發(fā)射線,并且排序找到玩家最先觸發(fā)的那個UI,在拋出事件給邏輯層去響應。在實際開發(fā)中,并非每一個UI都需要對發(fā)射的射線進行響應的,對于那些不需要做出響應的UI,取消勾選RaycastTarget在一定程度上可以減小性能的消耗。)
效果如圖所示:
通過上述的代碼就實現(xiàn)了復寫創(chuàng)建Image組建的邏輯,讓RaycastTarget默認不勾選。
轉載于:https://www.cnblogs.com/llllllvty/p/9880072.html
總結
以上是生活随笔為你收集整理的拓展编辑器(八)_重写菜单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 餐厅点餐系统需求分析
- 下一篇: 被动语态的时态