【unity游戏开辟——编辑器扩展】使用MenuItem自界说菜单栏拓展

[复制链接]
发表于 2025-9-8 03:46:11 | 显示全部楼层 |阅读模式
前置知识

1、Editor 编辑器文件夹

主要新项目须要本身手动创建



  • 作用:用于存放与Unity编辑器相干的脚本,内容不会被打包到发布版本中。
  • 注意:该文件夹中的脚本仅在编辑模式下使用,不会被打包到游戏发布包中。
2、不⽤ Editor ⽂件夹

如果你不想使用 Editor ⽂件夹实在也可以,我没就须要在代码中给每个 UnityEditor API 都加上#if UNITY_EDITOR宏判断。比如:
  1. #if UNITY_EDITOR
  2. using UnityEditor;
  3. #endif
  4. #if UNITY_EDITOR
  5.         [MenuItem("XYFrame/XYFrame/1.一键打包XYFrame")]
  6. #endif
复制代码
如许做的⽬的,是为了不影响我们项⽬打包。如果编辑器扩展相干代码不放在Editor文件夹内,又不加宏判断,项目打包会报错。
3、编辑器扩展相干命名空间

  1. using UnityEditor;
复制代码
一、使用MenuItem自界说菜单栏拓展



  • 特性:MenuItem
  • 作用:在菜单栏点击该页签时,将执行静态函数中逻辑。
  • 注意

    • 不用在意继承对象,不继承Monobehaviour也没题目。
    • 斜杠必须是 / 不能是 \ 。
    • 一定要加在静态函数上才有效

1、在Unity菜单栏中添加自界说页签

1.1 用法

在静态函数前加上
  1. [MenuItem("页签/一级选项/二级选项/....")]
复制代码
1.2 示例

  1. using UnityEditor;
  2. using UnityEngine;public class MenuItemTest{   [MenuItem("编辑器拓展/菜单1/子菜单1")]   private static void TestFun1()   {       Debug.Log("打印1");   }}
复制代码
效果

不须要运行游戏,点击即可执行TestFun1方法

2、在Hierarchy窗口中添加自界说页签

2.1 用法

在静态函数前加上,而且页签命名前面放入GameObject路径
  1. [MenuItem("GameObject/页签/一级选项/二级选项/....")]
复制代码
2.2 示例

  1. [MenuItem("GameObject/编辑器拓展/菜单1/子菜单1")]
  2. private static void TestFun2()
  3. {
  4.     Debug.Log("打印2");
  5. }
复制代码
效果

大概

3、在Project窗口中添加自界说页签

3.1 用法

在静态函数前加上,而且页签命名前面放入Assets路径
  1. [MenuItem("Assets/页签/一级选项/二级选项/....")]
复制代码
3.2 示例

  1. [MenuItem("Assets/编辑器拓展/菜单1/子菜单1")]
  2. private static void TestFun3()
  3. {
  4.     Debug.Log("打印3");
  5. }
复制代码
效果

大概

4、在Inspector对脚本右键添加菜单

4.1 用法

在静态函数前加上,而且页签命名前面放入CONTEXT路径
  1. [MenuItem("CONTEXT/脚本名/页签/一级选项/二级选项/....")]
复制代码
4.2 示例

  1. [MenuItem("CONTEXT/NewMonoBehaviourScript/编辑器拓展/菜单1/TestFun4")]
  2. private static void TestFun4()
  3. {
  4.     Debug.Log("打印4");
  5. }
复制代码

5、快捷键

5.1 先容



  • 底子用法:路径后 + 空格 + 下划线 + 想要的按键
    1. [MenuItem("编辑器拓展/菜单2/TestFun5 _F4")]
    复制代码
  • 特殊按键:%表现ctrl,#表现shift,&表现alt,注意使用特殊按键前面不须要加下划线
    1. //最后有个 “ %e”,这个就是快捷键的符号,意思是 ctrl/cmd + e
    2. [MenuItem("XYFrame/XYFrame/1.一键打包XYFrame %e")]
    复制代码
  • 其他支持的按键:LEFT、RIGHT、UP、DOWN、F1..F12、HOME、END、PGUP、PGDN 等等
5.2 示例

  1. [MenuItem("编辑器拓展/菜单2/TestFun5 _F4")]
  2. 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 所在的显示顺序,数值越⼤越在底部。
  1. [MenuItem("XYFrame/XYFrame/2.打开存储目录, false, 1")]
复制代码
注意:两个菜单按钮的排序差大于1,则会在两个按钮之间显示一条线举行分隔。
二、在菜单栏的Component菜单添加脚本(补充)

1、先容



  • 特性:AddComponentMenu
  • 用法:在想要通过Component菜单添加的脚本前加上
    1. [AddComponentMenu("一级选项/二级选项/....")]
    复制代码
  • 注意

    • 脚本须要继承MonoBehaviour对象。
    • 斜杠必须是 / 。
    • 最后一级选项的名字可以和脚本名不一样,但是建议划一。
    • 由于给GameObject添加的脚本肯定要继承Monobehaviour,所以不放在Editor文件夹。

2、示例

  1. using UnityEngine;
  2. [AddComponentMenu("编辑器拓展/菜单1/子菜单1")]
  3. public class AddComponentMenuTest : MonoBehaviour {
  4.    
  5. }
复制代码
脚本不放在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企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表