Unity Editor自定义菜单排序(MenuItem Order)

本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/14837474.html



扩展Unity的菜单MenuItem#

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

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

我的Unity版本:2019.3.7f1

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

  1. 函数参数有MenuCommand (menuCommand.context是当前菜单选中的对象)
Copy
[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. 普通创建一个菜单
Copy
[MenuItem("GameObject/排在系统菜单前(-1)", false, -1)] public static void GameObjectMenu1() { Debug.Log("hello"); }

菜单排序#

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

Copy
[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函数定义#

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

Unity内置菜单排序#

Assets菜单的排序优先级#

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

Unity原生Assets菜单的排序优先级

Assets/Create菜单排序

Assets/Create菜单排序

GameObject菜单排序#

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

GameObject菜单排序

Window菜单排序#

Window菜单排序

其它#

自定义AddComponent名字#

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

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

自定义AddComponent名字

参考资料#

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

作者:赵青青   一名在【网易游戏】做游戏开发的程序员,擅长Unity3D,游戏开发,.NET等领域。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。
posted @   赵青青  阅读(1576)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
阅读排行:
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 易语言 —— 开山篇
· Trae初体验
历史上的今天:
2018-06-01 在Unity中对Lua进行调试
2014-06-01 [汇编] 001基础知识-什么是汇编
CONTENTS
点击右上角即可分享
微信分享提示