前置知识
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、编辑器扩展相干命名空间
一、使用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,如果学习过程中遇到任何题目,也欢迎你品评私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞品评和关注,你的每一次支持都是我不停创作的最大动力。固然如果你发现了文章中存在错误大概有更好的解决方法,也欢迎品评私信告诉我哦!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|