当前位置: 首页 > news >正文

【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,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

相关文章:

  • 【计算机视觉】OpenCV实战项目:基于OpenCV的车牌识别系统深度解析
  • Excel的详细使用指南
  • MySQL初阶:查询进阶
  • Unity基础学习(十三)核心系统—物理系统之碰撞检测组件篇(2)刚体,碰撞体,材质
  • 前端学习(3)—— CSS实现热搜榜
  • OAuth安全架构深度剖析:协议机制与攻防实践
  • 操作系统实战——QEMU模拟器搭建【rCore 操作系统】
  • 后端开发面试高频50个问题,简单解答
  • w~大模型~合集30
  • Linux 软硬连接详解
  • 如何配置本机host文件
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.3)
  • phpstorm2024.3 设置中文
  • 国产大模型「五强争霸」:决战AGI,谁主沉浮?
  • Go 语言即时通讯系统开发日志-day1:从简单消息收发 Demo 起步
  • Python-AI调用大模型 给出大模型人格案例
  • java反序列化commons-collections链1
  • 魔搭社区(modelscope)和huggingface下载模型到本地的方法
  • 基于STM32、HAL库的ICP-20100气压传感器 驱动程序设计
  • 从 JIT 即时编译一直讲到CGI|FastGGI|WSGI|ASGI四种协议的实现细节
  • 海运港口股掀涨停潮!回应关税下调利好,有货代称美线舱位爆了
  • 梅花奖在上海丨陈丽俐“婺剧折戏专场”:文戏武做,武戏文唱
  • “远践”项目启动公益生态圈,上海青少年公益力量蓬勃生长
  • 极限拉扯上任巴西,安切洛蒂开启夏窗主帅大挪移?
  • 最高降价三成,苹果中国iPhone开启大促销,能拉动多少销量?
  • 加强战略矿产出口全链条管控工作部署会召开