扩展Unity的菜单MenuItem

MenuItem 属性用于向主菜单和检视面板上下文菜单添加菜单项。

该 MenuItem 属性能够将任何静态函数转变为菜单命令,仅静态函数可使用 MenuItem 属性

我的Unity版本:2019.3.7f1

创建菜单这几种写法都是可行

  1. 函数参数有MenuCommand (menuCommand.context是当前菜单选中的对象)
[MenuItem("GameObject/KSFramework/Custom Game Object", false, 10)]
static void CreateCustomGameObject(MenuCommand menuCommand)
{
GameObject go = new GameObject("Custom Game Object");
//把新创建的gameobject放在选中节点下
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
// Ctrl+Z可撤销当前操作
Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);
Selection.activeObject = go;
}
  1. 普通创建一个菜单
[MenuItem("GameObject/排在系统菜单前(-1)", false, -1)]
public static void GameObjectMenu1()
{
Debug.Log("hello");
}

菜单排序

使用MenuItem创建菜单时,最后一个字段就是菜单的排序

[MenuItem("GameObject/UI/Image/创建", false, 2001)]
static public void AddImage(MenuCommand menuCommand)
{
GameObject go = DefaultControls.CreateImage(GetStandardResources());
PlaceUIElementRoot(go, menuCommand);
var image = go.GetComponent<img>();
image.raycastTarget = false;
}

MenuItem函数定义

MenuItem(string path, bool isValidateFunction, int priority)

- path 在那个菜单上显示的,如GameObject/UI/xx ,会在Hierchy的右键菜单中显示
- isValidateFunction 当设置为true时,函数的返回值要为bool。另一个和它用MenuItem标记的相同路径的方法在调用之前会调用它,根据返回值来验证方法是否可执行,比如:开启服务菜单只能点一次,点完之后置灰,需要关闭才能再点击。
- Priority 菜单的排序

Unity内置菜单排序

Assets菜单的排序优先级

注意:不指定排序,也是在最后面,比如:[MenuItem("Assets/获取size")]

Assets/Create菜单排序

GameObject菜单排序

GameObject菜单中优先级小于50的,也将出现在Hierarchy的右键菜单中

Window菜单排序

其它

自定义AddComponent名字

一般情况下,我们点AddComponent,然后输入脚本的名字就可以附加上去,当然也可以自定义一个名字,比如

[AddComponentMenu("KSFramework/ActorBase")]
public class ActorBase : MonoBehaviour

参考资料

这篇文章非常详细地讲解了菜单项中的排序,包括Unity默认菜单的排序数值,本文的一些图也是来源于这篇文章 《 Guide to Extending Unity Editor’s Menus》

Unity Editor自定义菜单排序(MenuItem Order)的更多相关文章

  1. 一、Unity Editor自定义菜单

    官方文档:https://unity3d.com/cn/learn/tutorials/topics/interface-essentials/unity-editor-extensions-menu ...

  2. 使用knockout-sortable实现对自定义菜单的拖拽排序

    在开始之前,照例,我们先看效果和功能实现. 关于自定义菜单的实现,这里就不多说了,需要了解的请访问:http://www.cnblogs.com/codelove/p/4838766.html 这里需 ...

  3. 关于如何在 Unity 的 UI 菜单中默认创建出的控件 Raycast Target 属性默认为 false

    关于如何在 Unity 的 UI 菜单中默认创建出的控件 Raycast Target 属性默认为 false 我们在 Unity 中通过 UI 菜单创建的各种控件,比如 Text, Image 等, ...

  4. CI框架微信开发-自定义菜单

    在CI框架下面实现了自定义菜单功能.写了一个model,一个类库.顺便附带access_token的实现方式 <?php class Makemenu{ public $menustr; pub ...

  5. Unity Editor 下创建Lua和Text文件

    预览 在Project视图中,扩展右键菜单,右键 – Create - Text File 创建一个Text文件,或者Lua文件. 关键点 获取当前选择的路径,以Assets路径开头 var sele ...

  6. 最全面 think php 实现微信公众号回复编号进行投票,自定义菜单功能

    前期准备工作 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messag ...

  7. ORACLE自定义顺序排序-转

    ORACLE可以借助DECODE函数,自定义顺序排序: select * from ( select 'Nick' as item from dual union all select 'Viki' ...

  8. [wordpress]根据自定义字段排序并根据自定义字段查询

    Wordpress中,根据根据自定义字段排序和查询是通过WP_Query()方法 如根据 一个自定义的sort的数字字段从小到大进行排序 $args = array( 'post_type' => ...

  9. 【转】Android 系统菜单与自定义菜单

    Android 系统菜单与自定义菜单实现方法如下:系统菜单显示DefaultMenu.java package com.wxz.menu; import com.wxz.menu.R; import  ...

  10. 微信自定义菜单url默认80端口问题解决

    微信自定义菜单url默认80端口的,但是有些服务器上可能配置了多个tomcat.或者是刚好你服务器上80端口被占用了.在这样的情况下,我们可以通过如下方式解决: 首先安装apache,关于apache ...

随机推荐

  1. 电商流量分析怎么做?试试这款数据工具 DataLeap!

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 作为成熟的电商模式,货架场景可以让商家以更低的门槛入驻,让消费者完成更高销量的购买和复购. 在这一场景下,运营人员 ...

  2. CentOS 7 qemu 创建虚拟机简单流程

    查看是否支持虚拟化 egrep -o '(vmx|svm)' /proc/cpuinfo 如果有显示则支持虚拟化,没有显示则不支持   安装qemu 和virt 系列软件包 yum install q ...

  3. TypeError: this.libOptions.parse is not a function

    安装完node.js运行项目后,报错: TypeError: this.libOptions.parse is not a function at ESLint8Plugin.<anonymou ...

  4. 开源项目因支持乌克兰遭issue刷屏,网友:别用Nginx,别用元素周期表

    大家好,我是DD. 昨天,两条科技界的新闻炸了,一条是关于GitHub发文封锁俄罗斯,一条是关于Oracle暂停俄罗斯所有业务.一个是全球最大的开源软件社区,一个是全球最大的数据库软件厂商.似乎巨头的 ...

  5. OS | 读者写者问题(读者优先,写者优先 ,读写公平)

    读者优先 读者优先的解决方案: 互斥信号量 wrt,初值是 \(1\),代表一个共享文件,解决 "读-写"互斥,"写-写"互斥. 一个记数器,即整型变量 rea ...

  6. MyBatis:快速入门

    MyBatis 简介 MyBatis 是一个开源.轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案.MyBatis 内部封装了 JDBC,简化了加载驱动.创建连接.创建 sta ...

  7. 【每日一题】12.Running Median (对顶堆)

    补题链接:Here 题意:动态的维护中位数的问题,依次读入一个整数,每当总个数为奇数时输出此时序列的中位数 使用对顶堆的在线做法. 为了实时找到中位数,我们可以建议两个二叉堆:一个小根堆.一个大根堆. ...

  8. 悟空活动中台 - 基于 WebP 的图片高性能加载方案

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/rSpWorfNTajtqq_pd7H-nw作者:悟空中台研发团队 一.背景 移动端网页的加载 ...

  9. vivo悟空活动中台-打造 Nodejs 版本的MyBatis

    经典的架构设计可以跨越时间和语言,得以传承. -- 题记 一.背景 悟空活动中台技术文章系列又和大家见面了,天气渐冷,注意保暖. 在往期的系列技术文章中我们主要集中分享了前端技术的方方面面,如微组件的 ...

  10. 一、@Configuration、@Conponent 、@ComponentScan 注解等

    一句话概括 区别: @Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例.2. 可以直接调用方法,不需要 @Autowired 注入后使用. ...