重写菜单:

  前面我们已经知道了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来获取当前的事件。当监听到鼠标抬起的事件后,并满足游戏对象的选中状态,开始执行自定义事件。其中,EditorUtility.DisplayPopupMenu用于弹出自定义的菜单,Event.current.Use()的含义是不再执行原有的操作,所以就实现了重写菜单。

效果如图所示:

  

  我们先用鼠标选择一个游戏对象,点击右键即可弹出我们的重写菜单,这个菜单项已经和Unity自带的完全不一样了,它的工作原理就是上述代码的监听点击的事件,打开一个新的菜单窗口。

  除此之外,Hierarchy视图还可以重写系统自带的菜单行为。例如,我们可以腹泻Unity创建的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);//设置选中状态Selection.activeTransform = image.transform;}}}

  由于重写了菜单,所以需要通过脚本自行创建Image对象和组建。接着,获取到image组件对象,这届设置它的RaycastTarget属性即可(关于RaycastTarget:UI事件会在EventSystem在Update的Process触发。UGUI会遍历屏幕中所有RaycastTarget是true的UI,接着就会发射线,并且排序找到玩家最先触发的那个UI,在抛出事件给逻辑层去响应。在实际开发中,并非每一个UI都需要对发射的射线进行响应的,对于那些不需要做出响应的UI,取消勾选RaycastTarget在一定程度上可以减小性能的消耗。)

  效果如图所示:

通过上述的代码就实现了复写创建Image组建的逻辑,让RaycastTarget默认不勾选。

转载于:https://www.cnblogs.com/llllllvty/p/9880072.html

拓展编辑器(八)_重写菜单相关推荐

  1. 拓展编辑器(五)_监听事件

    监听事件 这个是拓展Project视图的最后一节,这里将会介绍一下如何借助程序来约束project视图中的资源.例如用程序来判断资源的原始位置以及将要移动的位置是否合法,从而决定是否能阻止本次移动.U ...

  2. 计算机桌面怎么设置在开始菜单,电脑桌面开始菜单不见了应该如何解决?_开始菜单不见了解决办法介绍...

    电脑桌面开始菜单不见了应该如何解决?_开始菜单不见了解决办法介绍 2018-06-22 16:26:29 近期朋友在电脑使用过程中,电脑桌面的开始菜单突然就消失不见了,以为重启之后就会成功显示出来,但 ...

  3. Unity 拓展编辑器 - 导出UI预制体lua文件

    使用oldin插件 + Unity自带拓展编辑器编写 实现效果: 界面配置基类:UIDialogConfig using Sirenix.OdinInspector; using UnityEngin ...

  4. 20-50人,拓展基地_拓展训练_拓展基地_拓展公司推荐_嗨牛团建

    20-50人,拓展基地_拓展训练_拓展基地_拓展公司推荐_嗨牛团建 20-50人,拓展基地_拓展训练_拓展基地_拓展公司推荐_嗨牛团建 posted on 2016-08-31 12:39 lexus ...

  5. JavaEE项目实战(OA系统)之十八_流程审批之一

    JavaEE项目实战(OA系统)之十八_流程审批之一 下面介绍OA系统的另一模块:流程审批. OA系统推崇的是无纸化办公,因此各项事务的流程审批是OA系统的一大类应用. 下面,我们来设计流程审批的数据 ...

  6. Unity_基础知识_界面菜单翻译

    ​ ​https://docs.unity3d.com/cn/2021.3/Manual/script-GridLayoutGroup.html​ 1.File 2.Edit 3.Asset 4.Ga ...

  7. 拓展编辑器(十八)_源生自定义菜单

    MenuItem是依托于Unity编辑器的菜单栏,换句话说就是无法设置它的位置.如果希望菜单的位置出现时更灵活的话,可以调用源生组定义菜单的方法.比如,可以在Scene视图中点击鼠标右键,此时会弹出一 ...

  8. 在文件编辑器中添加dock菜单项_将应用程序添加到Mac 的Dock的简便方法

    在OS X和较新的macOS中,Dock是Mac上最受认可的用户界面元素之一.Dock是一个方便的应用启动器,通常会拥抱屏幕底部.根据Dock中图标的数量,它可能会覆盖Mac显示屏的整个宽度. 苹果于 ...

  9. UNITY3D拓展编辑器 - 目录

    前文: 最近在自学UNITY3D拓展器,对以上功能点做一些认知范围内的总结. 目录: 1. 属性编辑器 http://weizeteng.blog.51cto.com/5604545/1774431 ...

最新文章

  1. 搞定一个C++项目最快需要多久?
  2. pythonexe32位-如何使用pyinstaller打包32位的exe程序
  3. SCons命令 之 从入门到精通
  4. 机器人写诗项目——数据预处理
  5. android夜间模式揭露动画,Android Material Design系列之夜间模式
  6. Linux学习笔记(4) - 文件系统
  7. mysql设置utf8_unicode_ci字符集php页面输出??乱码的解决方法
  8. 关于“只有静态常量整型数据成员才可以在类中初始化”
  9. JAVA多线程共享变量的可见性
  10. javascript字符串的方法
  11. RxJava在Android中的简单应用
  12. 华为外包软件公司集体罢工!
  13. 电影《功夫熊猫1》中的管理知识
  14. 免流发展史-三大运营商
  15. SQLSERVER2008 18456错误
  16. 我们写的程序就像我们的孩子
  17. 硬件工程师电路设计十大要点
  18. 用飞信批量加好友——解放鼠标,更解放你的手!
  19. 什么时候用多线程什么时候用多进程呢?GUL
  20. GBase 8a 数据抽取工具orato8a用法介绍

热门文章

  1. openwrt拨号上网设置
  2. 思考 |《爱好》—— 我真的做到了!
  3. 【后端教程】低代码起势,为什么它有希望“干掉”开发? | 甲子光年
  4. n个整数,找出连续的m个数加和是最大
  5. 1028: C语言程序设计教程(第三版)课后习题8.1用函数求公约数
  6. 男生如何正确的识别绿茶婊
  7. 标题:信号、传输介质、数制转换
  8. Oracle 中select XX_id_seq.nextval from dual 什么意思呢?
  9. Android通知——Notification
  10. Cocos Creator Android 平台 Google 原生登录