Unity 游戏框架搭建 2019 (三十、三十一) MenuItem 显示顺序问题 & 类的提取

根据问题去学习,并收集。

主动学习,并思考适用场景。

我们今天解决 MenuItem 显示顺序问题。

目前 MenuItem 显示如图所示:

006tNc79gy1fzfr9xwxavj30dy05cjuf.jpg

我们来看下 MenuItem 这个属性构造的定义。

第二个参数是,是否是验证方法,目前不用理解,官网上默认是 false。
第三个参数,意思是优先级,表示 MenuItem 所在的显示顺序,数值越大越在底部。

我们先给第七个示例试一下。将代码改成如下:

using System.IO; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class CustomShortCut : MonoBehaviour { #if UNITY_EDITOR [MenuItem("QFramework/7.自定义快捷键 %e",false,-10)] private static void MenuClicked() { var generatePackageName = Exporter.GenerateUnityPackageName(); EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage"); EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../")); } #endif } }

编译后观察菜单栏,结果如下图所示:

006tNc79gy1fzfra0plpnj30kk0ayjyb.jpg


在最上方显示了。顺便我们把第七个示例的文件名和菜单名都改一下,都从 7.XXX 改成 1.XXX。

文件名如下:

006tNc79gy1fzfra3hcqmj31380bkac8.jpg

菜单名代码如下:

using System.IO; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class CustomShortCut : MonoBehaviour { #if UNITY_EDITOR [MenuItem("QFramework/1.自定义快捷键 %e",false,-10)] private static void MenuClicked() { var generatePackageName = Exporter.GenerateUnityPackageName(); EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage"); EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../")); } #endif } }

编译通过后菜单如下图所示:

006tNc79gy1fzfra6bc3uj30gi09u7aq.jpg

其实菜单中的名字,还是不是合理,虽然这个示例我们是为了学习自定义快捷写下的,但是如果时间长了,我们看到上图的菜单栏还会懵一下。其实它的名字,应该叫做导出 UnityPackage。

我们就把菜单和目录名都改成这个 1. 导出 UnityPackage。具体怎么改大家应该知道了吧?

改完后的菜单如下:

006tNc79gy1fzfra95qlqj30jm0aeq9y.jpg


目录如下:

006tNc79gy1fzfracehiuj30ze0aq40b.jpg

在上面,我们搞定了调整菜单栏顺序的关键问题。

我们今天把剩下的顺序调整完,我们先整理第八个示例。

第八个示例

我们先看第八个示例的第一个 MenuItem,代码如下。

[MenuItem("QFramework/8.总结之前的方法/1.获取文件名")] private static void MenuClicked() { Debug.Log(Exporter.GenerateUnityPackageName()); }

其中的 “QFramework/8.总结之前的方法/1.获取文件名” 我们可以改成 “QFramework/2.总结之前的方法/1.获取文件名”

不过这个总结的功能,对我们来说没有太大的作用了,因为我们在刚刚完成的第一个示例中,已经包含了 Exporter.GenerateUnityPackageName 的使用方式了。

第一个示例代码如下:

using System.IO; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class CustomShortCut : MonoBehaviour { #if UNITY_EDITOR [MenuItem("QFramework/1.导出 UnityPackage %e",false,-10)] private static void MenuClicked() { var generatePackageName = Exporter.GenerateUnityPackageName(); EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage"); EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../")); } #endif } }

所以,我们删掉第八个示例中的这个 MenuItem 方法就好了。

再看第二个 MenuItem 代码如下:

[MenuItem("QFramework/8.总结之前的方法/2.复制文本到剪切板")] private static void MenuClicked2() { CommonUtil.CopyText("要复制的关键字"); }

代码中 CommonUtil.CopyText 的使用,没有在第一个示例中包含。所以这个 MenuItem 要保留。

这个呢可以留着,我们对这段代码的 MenuItem 进行改进。改进后代码如下所示:

[MenuItem("QFramework/2.复制文本到剪切板",false,2)] private static void MenuClicked2() { CommonUtil.CopyText("要复制的关键字"); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdwzj.html