在上一篇中我们搞定了直接弹出文件夹功能,那么在这篇我们试着把它集成到我们导出步骤了。
那么我们要在第四个示例上直接加入代码嘛?
不是的,从笔者写教程的角度来讲,这样做会造成一个问题。教程和示例是一起发布的,如果在第四个示例上直接加入代码,那么,如果刚刚看完第四个篇教程的同学,去翻代码的时候,结果第四个示例根本看不懂,这样很容易造成困惑。
而这个框架搭建系列专栏作为笔者打算写一年的年度大专栏,这才刚到第六篇文章就要改之前的代码,是不允许这样做的:)。所以呢这部分只能做一点妥协。
要么在第六个示例中把第四个示例的核心代码复制过来,要么在第六个示例中想想有没有办法直接调用第四个示例的代码。作为一个优秀的开发者,肯定不要用前者了。
我们先来看看第四个示例的代码
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。
那么我们的导出步骤可以更新了。
原来是:
- 点击菜单栏 QFramework/4.导出 UnityPackage。
现在变成了:
- 点击菜单栏 QFramework/6.MenuItem 复用。
这个名字容易造成误导,不过没关系,这只是暂时的方案。我们之后还会改进导出逻辑的。
小结
到此,我们又节省了自己一点时间,假如每次打开文件夹需要 5 秒钟时间。那么 1000 个知识点就会节省 130 块钱。加上第四篇的 390,再加上第三篇的 130 我们总共赚了 650 块。
虽然说得有点夸张,但是从小老师就告诉了我们一个简单的道理:“时间就是金钱”。
转载请注明地址:凉鞋的笔记:liangxiegame.com