日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

拓展编辑器(八)_重写菜单

發(fā)布時間:2023/12/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拓展编辑器(八)_重写菜单 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

重寫菜單:

  前面我們已經(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。