【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展
本文主要介绍了Unity编辑器扩展的相关知识,重点讲解了如何使用MenuItem特性在Unity菜单栏、Hierarchy窗口、Project窗口和Inspector中添加自定义菜单项,并支持快捷键操作。文章还提到如何通过AddComponentMenu特性在Component菜单中添加脚本。此外,作者强调了学习过程中参考了大量资料,并整合了多位老师的教程,最终形成了自己的学习笔记。文章还解释了为
文章目录
前置知识
1、Editor 编辑器文件夹
主要新项目需要自己手动创建
- 作用:用于存放与Unity编辑器相关的脚本,内容不会被打包到发布版本中。
- 注意:该文件夹中的脚本仅在编辑模式下使用,不会被打包到游戏发布包中。
2、不⽤ Editor ⽂件夹
如果你不想使用 Editor ⽂件夹其实也可以,我没就需要在代码中给每个 UnityEditor API
都加上#if UNITY_EDITOR
宏判断。比如:
#if UNITY_EDITOR
using UnityEditor;
#endif
#if UNITY_EDITOR
[MenuItem("XYFrame/XYFrame/1.一键打包XYFrame")]
#endif
这样做的⽬的,是为了不影响我们项⽬打包。如果编辑器扩展相关代码不放在Editor文件夹内,又不加宏判断,项目打包会报错。
3、编辑器扩展相关命名空间
using UnityEditor;
一、使用MenuItem自定义菜单栏拓展
- 特性:MenuItem
- 作用:在菜单栏点击该页签时,将执行静态函数中逻辑。
- 注意:
- 不用在意继承对象,不继承Monobehaviour也没问题。
- 斜杠必须是
/
不能是\
。 - 一定要加在静态函数上才有效
1、在Unity菜单栏中添加自定义页签
1.1 用法
在静态函数前加上
[MenuItem("页签/一级选项/二级选项/....")]
1.2 示例
using UnityEditor;
using UnityEngine;
public class MenuItemTest
{
[MenuItem("编辑器拓展/菜单1/子菜单1")]
private static void TestFun1()
{
Debug.Log("打印1");
}
}
效果
不需要运行游戏,点击即可执行TestFun1方法
2、在Hierarchy窗口中添加自定义页签
2.1 用法
在静态函数前加上,并且页签命名前面放入GameObject路径
[MenuItem("GameObject/页签/一级选项/二级选项/....")]
2.2 示例
[MenuItem("GameObject/编辑器拓展/菜单1/子菜单1")]
private static void TestFun2()
{
Debug.Log("打印2");
}
效果
或者
3、在Project窗口中添加自定义页签
3.1 用法
在静态函数前加上,并且页签命名前面放入Assets
路径
[MenuItem("Assets/页签/一级选项/二级选项/....")]
3.2 示例
[MenuItem("Assets/编辑器拓展/菜单1/子菜单1")]
private static void TestFun3()
{
Debug.Log("打印3");
}
效果
或者
4、在Inspector对脚本右键添加菜单
4.1 用法
在静态函数前加上,并且页签命名前面放入CONTEXT
路径
[MenuItem("CONTEXT/脚本名/页签/一级选项/二级选项/....")]
4.2 示例
[MenuItem("CONTEXT/NewMonoBehaviourScript/编辑器拓展/菜单1/TestFun4")]
private static void TestFun4()
{
Debug.Log("打印4");
}
5、快捷键
5.1 介绍
-
基础用法:路径后 + 空格 + 下划线 + 想要的按键
[MenuItem("编辑器拓展/菜单2/TestFun5 _F4")]
-
特殊按键:
%
表示ctrl
,#
表示shift
,&
表示alt
,注意使用特殊按键前面不需要加下划线//最后有个 “ %e”,这个就是快捷键的符号,意思是 ctrl/cmd + e [MenuItem("XYFrame/XYFrame/1.一键打包XYFrame %e")]
-
其他支持的按键:
LEFT、RIGHT、UP、DOWN、F1..F12、HOME、END、PGUP、PGDN 等等
5.2 示例
[MenuItem("编辑器拓展/菜单2/TestFun5 _F4")]
private static void TestFun5()
{
Debug.Log("TestFun5");
}
[MenuItem("编辑器拓展/菜单2/TestFun6 _A")]
private static void TestFun6()
{
Debug.Log("TestFun6");
}
[MenuItem("编辑器拓展/菜单2/TestFun7 _%#&A")]
private static void TestFun7()
{
Debug.Log("TestFun7");
}
效果
6、排序
MenuItem第三个参数,意思是优先级,表示 MenuItem 所在的显示顺序,数值越⼤越在底部。
[MenuItem("XYFrame/XYFrame/2.打开存储目录, false, 1")]
注意:两个菜单按钮的排序差大于1,则会在两个按钮之间显示一条线进行分隔。
二、在菜单栏的Component菜单添加脚本(补充)
1、介绍
- 特性:AddComponentMenu
- 用法:在想要通过Component菜单添加的脚本前加上
[AddComponentMenu("一级选项/二级选项/....")]
- 注意:
- 脚本需要继承MonoBehaviour对象。
- 斜杠必须是 / 。
- 最后一级选项的名字可以和脚本名不一样,但是建议一致。
- 由于给GameObject添加的脚本肯定要继承Monobehaviour,所以不放在Editor文件夹。
2、示例
using UnityEngine;
[AddComponentMenu("编辑器拓展/菜单1/子菜单1")]
public class AddComponentMenuTest : MonoBehaviour {
}
脚本不放在Editor文件夹
效果
或者
专栏推荐
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
更多推荐
所有评论(0)