Unity 游戏框架搭建 2019 (六) MenuItem 复用

【Unity入门】MenuItem 和 ContextMenu 的使用方法 但是这里有个问题就是,我们并不能够像 GameObject/XXX 这样,把选项放在 UI 的外面,这样做的话,我们只会在顶部栏的 GameObject 目录下发现那个XXX的选项,在 Hierarchy 什么也不会有,这点需要大家注意。这段的意思就是,如果你没有选中任何游戏对象,或者你选中的不是GameObject类型的对象时,MenuItem/Selected GameObject选项会是被禁用的(灰色)状态,只有选的是指定类型的选项时,才是正常的可点击状态。 阅读详情
在上一篇中我们搞定了直接弹出文件夹功能,那么在这篇我们试着把它集成到我们导出步骤了。
那么我们要在第四个示例上直接加入代码嘛?
不是的,从笔者写教程的角度来讲,这样做会造成一个问题。教程和示例是一起发布的,如果在第四个示例上直接加入代码,那么,如果刚刚看完第四个篇教程的同学,去翻代码的时候,结果第四个示例根本看不懂,这样很容易造成困惑。
而这个框架搭建系列专栏作为笔者打算写一年的年度大专栏,这才刚到第六篇文章就要改之前的代码,是不允许这样做的:)。所以呢这部分只能做一点妥协。
要么在第六个示例中把第四个示例的核心代码复制过来,要么在第六个示例中想想有没有办法直接调用第四个示例的代码。作为一个优秀的开发者,肯定不要用前者了。
我们先来看看第四个示例的代码
    
using System ; # if UNITY_EDITOR using UnityEditor ; # endif using UnityEngine ; namespace QFramework { public class ExportUnityPackage : MonoBehaviour { # if UNITY_EDITOR [ MenuItem ( "QFramework/4.导出 UnityPackage" ) ] private static void MenuClicked ( ) { var assetPathName = "Assets/QFramework" ; var fileName = "QFramework_" + DateTime . Now . ToString ( "yyyyMMdd_hh" ) + ".unitypackage" ; AssetDatabase . ExportPackage ( assetPathName , fileName , ExportPackageOptions . Recurse ) ; } # endif } }
很遗憾地看到,这个 MenuClicked 被声明为了 private 类型。所以无法直接调用了。
那么有别的办法嘛?
答案是有的。
MenuItem 是可以被调用的。笔者是怎么知道的呢,就是用到的一些插件还有项目都会去试着去看看,看懂一点,有收获就写个例子记录到自己的知识库里。
关键 API 如下:
    
EditorApplication . ExecuteMenuItem ( "QFramework/4.导出 UnityPackage" ) ;
只要执行这行代码,就可以执行示例四的逻辑了,也就是一键导出 unitypackage 的逻辑。
我们的今天的示例代码如下:
    
using System . IO ; # if UNITY_EDITOR using UnityEditor ; # endif using UnityEngine ; namespace QFramework { public class ReuseMenuItem : MonoBehaviour { # if UNITY_EDITOR [ MenuItem ( "QFramework/6.MenuItem 复用" ) ] private static void MenuClicked ( ) { EditorApplication . ExecuteMenuItem ( "QFramework/4.导出 UnityPackage" ) ; Application . OpenURL ( "file:///" + Path . Combine ( Application . dataPath , "../" ) ) ; } # endif } }
代码很简单,主要是第二行,因为我们的 unitypackage 是创建到 Assets 的上一级目录下,所以我们要打开的目录要拼接一个 “../“ ,这个是上一级的意思,使用 Path.Combine 这个 API 可以帮我们自动转换目录。
执行这个示例菜单,执行之后,就会自动导出我们的 unitypackage,并打开了 unitypackage 所在的文件夹。
执行之后结果如图:
是不是很方便? 到此,笔者的导出 UnityPackage 也就是我们的知识库,名字为: QFramework_20181103_05。
那么我们的导出步骤可以更新了。
原来是:
  1. 点击菜单栏 QFramework/4.导出 UnityPackage。
现在变成了:
  1. 点击菜单栏 QFramework/6.MenuItem 复用。
这个名字容易造成误导,不过没关系,这只是暂时的方案。我们之后还会改进导出逻辑的。

小结

到此,我们又节省了自己一点时间,假如每次打开文件夹需要 5 秒钟时间。那么 1000 个知识点就会节省 130 块钱。加上第四篇的 390,再加上第三篇的 130 我们总共赚了 650 块。
虽然说得有点夸张,但是从小老师就告诉了我们一个简单的道理:“时间就是金钱”。
转载请注明地址:凉鞋的笔记: liangxiegame.com

更多内容

  • QQ 交流群: 623597263
  • Unity 进阶小班 :
  • 主要训练内容:
  • 框架搭建训练(第一年)
  • 跟着案例学 Shader(第一年)
  • 副业的孵化(第二年、第三年)
  • 权益、授课形式等具体详情请查看 《小班产品手册》 :https://liangxiegame.com/master/intro
  • 关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。
【Unity】MenuItem 和 ContextMenu 的实战技巧与场景应用 本文深入解析Unity编辑器扩展利器MenuItem与ContextMenu的核心区别与实战技巧。MenuItem用于创建全局编辑器菜单与快捷键,提升工作流效率;ContextMenu则为特定脚本提供便捷的调试与操作入口。文章通过代码示例详细展示了二者的高级应用场景与避坑指南,帮助开发者高效定制Unity编辑器。 阅读详情

相关推荐

Unity 编辑器篇|(一)MenuItem菜单栏

"一级菜单/二级菜单上/三级菜单""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""一级菜单/二级菜单中 %#_B""一级菜单/二级菜单下 %&_C""GameObject/二级菜单""CONTEXT/组件名/菜单名""一级菜单/二级菜单上 #_A""Assets/二级菜单""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""一级菜单/二级菜单下""一级菜单/二级菜单上""一级菜单/二级菜单中""一级菜单/二级菜单下""自定义/Test"

游戏开发小Y的博客 13万+

Unity 游戏框架搭建 2019 (三十) MenuItem 显示顺序问题

在上一篇,我们得出了两个核心的学习思路: 根据问题去学习,并收集。 主动学习,并思考适用场景。 我们今天解决 MenuItem 显示顺序问题。 目前 MenuItem 显示如图所示: 我们来看下 MenuItem 这个属性构造的定义。 第二个参数是,是否是验证方法,目前不用理解,官网上默认是 false。 第三个参数,意思是优先级,表示 MenuItem 所在的显示顺序,数值越大越在底部。...

凉鞋的笔记 1211

【Unity编辑器扩展】| 顶部菜单栏扩展 MenuItem

前面我们介绍了Unity中编辑器扩展的一些基本概念级基础知识,还有编辑器扩展中用到的相关特性Attribute介绍。 后面就来针对Uniity编辑器扩展中比较常用的模块进行学习介绍。 本文就来详细介绍一下Unity编辑器扩展中关于菜单栏项的扩展功能学习。

努力前行,总会成为自己心中的那道光 6万+

【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展

本文主要介绍了Unity编辑器扩展的相关知识,重点讲解了如何使用MenuItem特性在Unity菜单栏、Hierarchy窗口、Project窗口和Inspector中添加自定义菜单项,并支持快捷键操作。文章还提到如何通过AddComponentMenu特性在Component菜单中添加脚本。此外,作者强调了学习过程中参考了大量资料,并整合了多位老师的教程,最终形成了自己的学习笔记。文章还解释了为何选择收费模式,并鼓励读者支持其创作。最后,作者计划在博客首页展示参考过的博主链接,以表达感谢。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2140

手把手带你编写miniQMT实盘量化执行程序(3) | 交易系统

本文介绍了miniQMT实盘量化执行系统的核心交易系统代码,重点讲解了其模块化设计和工作流程。系统采用主控类LiveSystem管理交易全流程,包含初始化引擎、交易日判断、交易时段划分(开盘前、盘中、收盘等)、主循环调度和异常处理等核心功能。作者详细解析了系统如何实现365天不间断运行、精准判断交易日、分阶段执行交易策略等功能,并强调系统的稳定性和异常处理机制。

1306

AI气象预报:数值模式融合与短临预警的工程实践

气象预报正经历从物理推演到数据驱动的认知范式转变。AI气象预报并非替代传统数值模式,而是通过数值模式融合弥补其在参数化误差、初值敏感性和计算效率上的固有瓶颈。其技术价值在于提升短临预警时效性与空间精度,支撑航空调度、电力调控、防洪应急等关键场景。实践中需兼顾物理一致性、可解释性与业务系统兼容性,避免纯黑箱建模带来的外推失效与不确定性缺失风险。本文聚焦AI作为超分辨率引擎、误差矫正器和短临加速器的三类落地路径,解析HEALPix投影、多尺度图建模、轻量级U-Net等核心适配方法。

weixin_28221501的博客 298

Unity 游戏框架搭建:MenuItem 显示顺序问题

在上一篇,我们得出了两个核心的学习思路:根据问题去学习,并收集。主动学习,并思考适用场景。我们今天解决 MenuItem 显示顺序问题。目前 MenuItem 显示如图所示:我们来看下 MenuItem 这个属性构造的定义。 第二个参数是,是否是验证方法,目前不用理解,官网上默认是 false。 第三个参数,意思是优先级,表示 MenuItem 所在的显示顺序,数值越大越在底部。我们先给第七个示例...

unityofficial的博客 185

告别卡顿!用U盘给你的MacBook Pro 2015+来一次macOS Monterey的‘大扫除’式安装

每次系统升级后,老款MacBook Pro用户最常抱怨的就是"怎么比之前更卡了?"——这不是错觉。系统迭代过程中积累的缓存文件、残留配置和隐形服务,就像房间角落堆积的灰尘,拖慢了整台机器的响应速度。而通过U盘进行的macOS Monterey全新安装,本质上是一次彻底的"数字大扫除":它不仅替换系统文件,还会重建所有索引、清理磁盘碎片,甚至能解决某些玄学般的卡顿问题。对于2015款及之后的MacBook Pro用户,这种安装方式能让老设备重获新生。

weixin_28731223的博客 311

Unity 游戏框架搭建 2019 (四十二) MonoBehaviour 简化

在前两篇,我们完成了第九个示例。为了完善第九个示例,我们复习了类的继承,又学习了泛型和 params 关键字。 我们已经接触了类的继承了。接触继承之前,把类仅仅当做是方法的集合,接触了继承之后,我们的类还可以使用继承来解决一些问题。 第十个示例 在 Unity 中,我们的脚本都往往继承自 MonoBehaviour,继承了之后我们就可以在脚本内编写很多功能。比如访问 transform/gameO...

凉鞋的笔记 1922

从配置字到实际运动:手把手教你用EtherCAT调试伺服电机的控制模式(以倍福TwinCAT3为例)

本文详细介绍了如何使用EtherCAT调试伺服电机的控制模式,以倍福TwinCAT3为例。从环境搭建、模式配置到状态机切换,提供了完整的操作指南和典型故障排查方法,帮助工程师快速解决‘配置字写入了但电机不转’等常见问题,提升工业自动化现场的调试效率。

weixin_42783709的博客 421

STC8G1K08A 实战应用:从配置到功能实现

本文详细介绍了STC8G1K08A单片机的实战应用,从开发环境搭建、GPIO配置、ADC模块使用到定时器中断处理和PWM输出等核心功能。重点讲解了外设模块的协同工作配置技巧,并分享了实际项目开发中的经验教训,帮助开发者快速掌握STC8G1K08A的高效应用。

n4o5p6q7r的博客 391

Unity 游戏框架搭建 2019 (七) 自定义快捷键

在上一篇我们搞定了一键导出这个功能。那么在这篇文章中我们接着往下探索。 我们还是列出我们的导出步骤: 点击菜单栏 QFramework/6.MenuItem 复用。 这样一步很简单。 只要点击菜单栏 QFramework/6.MenuItem 复用,就可以完成我们的导出操作。 我们要思考这句话本身“点击菜单栏 QFramework/6.MenuItem 复用” 点击,是我们仅做的一步操作。那么...

凉鞋的笔记 1267

MOOS-ivp 实验一 MOOS软件的安装与执行

MOOS-ivp实验一 实验一步骤总结 文章目录MOOS-ivp实验一前言一、实验一1.下载软件2.安装必要的插件3.安装后检查4.路径添加5.执行示例文件总结 前言 在moos学习过程中,我觉得最好把学习的每一步骤都总结一下,方便日后进行回顾。moos官网设置了十八个实验,涉及到了moos的各个方面,完成这些实验也是moos入门的好办法。 一、实验一 实验一主要内容仅仅是软件的安装,仅仅这一步就花费了我接近两天的时间。主要问题发生在linux系统的配置问题上。 1.下载软件 svn co https:

weixin_44151170的博客 6669

Unity 游戏框架搭建 2019 (九、十、十一) 第一章小结&第二章简介&第八个示例(一)

第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习。 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例。 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示例中有的是我们后续库的基础工具,也有的是在项目中非常实用的小工具,还有一些示例是实践了在框架搭建方向上非常重要的 C# 语法知识。 第二章大纲如下。 第八个示例(一) 在之前,我们完成了一个导出的...

凉鞋的笔记 930

【云原生技术】K8s 在拉取镜像时报错tls: failed to verify certificate: x509: certificate signed by unknown authority

原因 Kubernetes 节点在拉取镜像时会对 Harbor 的 HTTPS 证书做严格校验; 日志里的核心报错是: ``` tls: failed to verify certificate: x509: certificate signed by unknown authority ``` 说明 Harbor 返回的服务器证书要么是自签发,要么缺少在系统信任链里的根/中级 CA,节点因此拒绝连接。 你需要让 **所有负责拉镜像的节点(containerd 或 Docker 守护进程)

weixin_46453070的博客 2873

用python画年度和月度的日历图

用python画各种日历图,可以区分月份来画也可以画一整年的,日历图中可以体现自己的信息

weixin_44853840的博客 2138

Unity 游戏框架搭建 2019 (三十三) 代码文件命名

在上一篇中,通过第八个示例的第三个 MenuItem 方法,我们更新了约定和规则。 我们接着往下整理。 第八个示例的第四个 MenuItem 方法 [MenuItem("QFramework/8.总结之前的方法/4.导出 UnityPackage")] private static void MenuClicked4() { EditorUtil.ExportPackage("A...

凉鞋的笔记 747

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Unity进阶】MenuItem与ContextMenu实战:打造高效编辑器菜单系统

本文深入解析Unity编辑器扩展中的MenuItem与ContextMenu,教你如何利用这两个核心特性打造高效的编辑器菜单系统。MenuItem用于创建全局编辑器命令,支持快捷键、条件验证及多窗口集成;ContextMenu则为特定MonoBehaviour脚本添加上下文快捷操作。文章通过实战案例展示如何协同使用两者,显著提升Unity工作流效率。

whisky的博客 1070

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Unity编辑器扩展:MenuItem与ContextMenu实战指南

在Unity开发中,编辑器扩展是提升团队协作效率和开发体验的关键技术。其核心原理在于利用C#特性(Attribute)和反射机制,将自定义功能无缝集成到Unity编辑器界面中。通过静态方法绑定和上下文感知,开发者可以将高频操作封装为便捷命令,实现工作流的自动化与标准化。这项技术的核心价值在于减少重复劳动、规范操作流程,并能显著降低人为错误。在实际应用场景中,无论是批量处理资源、快速配置游戏对象,还是为自定义组件添加快捷功能,MenuItem和ContextMenu都提供了直观的解决方案。本文聚焦于这两个核心

weixin_34302561的博客 453

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Unity 游戏框架搭建 2019 (十二) 第八个示例(二)

在上一篇我们抽取了第一个示例的方法,我们在这篇在接着往下抽取。 提取第二个示例 先看第二个示例的代码。 #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public static class CopyText2Clipboard { #if UNITY_EDITOR ...

凉鞋的笔记 1041

Unity MenuItem复用API

//MenuItem复用API,复用示例4 EditorApplication.ExecuteMenuItem("QFramework/4.导出UnityPackage");

凉夏微微 427

Unity 游戏框架搭建 2019 (三十一) 类的提取

在上一篇,我们搞定了调整菜单栏顺序的关键问题。 我们今天把剩下的顺序调整完,我们先整理第八个示例。 第八个示例 我们先看第八个示例的第一个 MenuItem,代码如下。 [MenuItem("QFramework/8.总结之前的方法/1.获取文件名")] private static void MenuClicked() { Debug.Log(Exporter.Generate...

凉鞋的笔记 378

unity menuitem_Unity 游戏框架搭建 2019 (四十六) 简易消息机制

在上一篇,我们接触了单例,使用单例解决了我们脚本之间访问的问题。脚本之间访问其实有更好的方式。我们先分下脚本访问脚本的几种形式。第一种,A GameObject 是 B GameObject 的 Parent,或者是中间隔着几个层级的 Parent。那这种情况下,如果 A 脚本想调用 B 脚本的方法,直接通过 transform.Find(“XXX/YYY/ZZZ”).GetComponent&l...

weixin_39559119的博客 121

Unity 游戏框架搭建 2019 (二十八) 弃用的代码删除

我们在这篇把所有的弃用代码删除掉。 示例十 代码如下 using System; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class TransformLocalPosImprovements { #if UNITY_EDITOR [Menu...

凉鞋的笔记 964
上一篇: [Unity Tips] UGUI显示清晰字体的小技巧
下一篇: Unity2019.最新2D工具Sprite Shape使用指南
Unity官方开发者社区
博客等级 码龄3年 597粉丝 752原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值