【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展
免职声明:
- 1、目前本博客分享的大部分知识产出方式是:学习别人知识+自己实际做一遍+自己的理解+扩展内容+自己整理、归纳、总结再分享。
- 2、正如博客简介所说:
这里没有教程,这里只做学习分享
。所有的内容都是学习笔记,可以说没有什么内容是真正的意义上的“原创”,哪怕是如何安装unity都是跟着网上教程学习的,我的学习理念是:与其闭门造车,不如站在巨人的肩膀上 —— 融会贯通行业前辈们的宝贵经验。- 3、unity基础入门知识我就看了3个老师的教程,然后整合起来。比如这里的【unity游戏开发入门到精通】,其实一开始是看b站飞羽老师的,然后又融合外网CodeMonkey的知识,最后又看了唐老师的基础入门的课程,结果发现唐老师的课程确实讲的最好,又全部推翻重置了,目前看到的其实已经是第三版了。其中还包括一些其他的实战内容和自己的理解。
- 4、其实每篇文章我都参考了很多资料。真要全部写出来,可能理不清楚。比如参考平台有b站、百度、知乎、csdn、siki、泰课、unity官方文档、外网论坛、一些私人博客网站等等,博主包括唐老师、林新发、BeaverJoe、奥飒姆、飞鱼老师、麦扣、打工人小棋、C酱、IGBeginner0116等等,外网就更多了都不太记得名字了比如CodeMonkey、MixandJam、SunnyValleyStudio等等。这里就不一一列举了,毕竟参考的资料实在太多了。
- 5、参考的部分博主我都私信问过了,得到过许可。
- 6、关于原创性。我觉得有个说法很好,只要不是直接复制粘贴,而是自己
整理、归纳、总结
,我觉得都可以算原创。学习他人知识其实更像是查阅了参考资料,不然,除了官方文档,应该都不算是原创内容了。- 7、为什么收费?我也很佩服那些无偿分享知识甚至开源的人,他们真的很伟大。但是,我也理解为什么有些人会选择收费。毕竟,时间和精力都是有限的,有时候整理一个知识点就花费几个星期甚至上月,也不是每个家庭都很富裕,我们需要通过分享知识来获得一定的经济回报,以支持我们的创作和维护。另外CSDN也没有任何其他的广告收入方式,完全靠用爱发电。所以,如果你觉得我的文章对你有帮助,欢迎支持我,谢谢!
- 8、费用我也尽量最低(CSDN官方拿一半的分成,分到我手没多少),这个价格也仅仅算是收个笔记整理费用了,这个价格如果想要在其他地方购买,我想也很难买到了。如果大家不想花这个钱,也可以去网上找一些免费的视频教程,比如B站、YouTube等自行去进行学习整理,我分享的所有知识,不出意外都能在网上找到相关的解决方案。
- 9、交易是你情我愿的,如果不满意可以选择退款。当然,如果有人觉得我整理的不好,也欢迎私信评论告诉我,我会重新整理的。
- 10、正如前面所说,参考的资料太多了,每个文章都去写很麻烦。后面我会在首页做个
感谢榜
,尽量将参考过的博主链接直接放在首页展示,大家可以自行去查看。如果有遗漏也欢迎找我补充。- 11、为什么选择CSDN?一是习惯了,用了很多年了,一个是它的SEO做的确实很优秀。
注意
:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。
文章目录
- 前置知识
- 1、Editor 编辑器文件夹
- 2、不⽤ Editor ⽂件夹
- 3、编辑器扩展相关命名空间
- 一、使用MenuItem自定义菜单栏拓展
- 1、在Unity菜单栏中添加自定义页签
- 1.1 用法
- 1.2 示例
- 2、在Hierarchy窗口中添加自定义页签
- 2.1 用法
- 2.2 示例
- 3、在Project窗口中添加自定义页签
- 3.1 用法
- 3.2 示例
- 4、在Inspector对脚本右键添加菜单
- 4.1 用法
- 4.2 示例
- 5、快捷键
- 5.1 介绍
- 5.2 示例
- 6、排序
- 二、在菜单栏的Component菜单添加脚本(补充)
- 1、介绍
- 2、示例
- 专栏推荐
- 完结
前置知识
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文件夹
效果
或者
专栏推荐
地址 |
---|
【unity游戏开发入门到精通——C#篇】 |
【unity游戏开发入门到精通——unity通用篇】 |
【unity游戏开发入门到精通——unity3D篇】 |
【unity游戏开发入门到精通——unity2D篇】 |
【unity实战】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架/工具集开发】 |
【unity游戏开发——模型篇】 |
【unity游戏开发——InputSystem】 |
【unity游戏开发——Animator动画】 |
【unity游戏开发——UGUI】 |
【unity游戏开发——联网篇】 |
【unity游戏开发——优化篇】 |
【unity游戏开发——shader篇】 |
【unity游戏开发——编辑器扩展】 |
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!