zoukankan      html  css  js  c++  java
  • Unity 游戏框架搭建 2019 (六) MenuItem 复用

    在上一篇中我们搞定了直接弹出文件夹功能,那么在这篇我们试着把它集成到我们导出步骤了。

    那么我们要在第四个示例上直接加入代码嘛?

    不是的,从笔者写教程的角度来讲,这样做会造成一个问题。教程和示例是一起发布的,如果在第四个示例上直接加入代码,那么,如果刚刚看完第四个篇教程的同学,去翻代码的时候,结果第四个示例根本看不懂,这样很容易造成困惑。

    而这个框架搭建系列专栏作为笔者打算写一年的年度大专栏,这才刚到第六篇文章就要改之前的代码,是不允许这样做的:)。所以呢这部分只能做一点妥协。

    要么在第六个示例中把第四个示例的核心代码复制过来,要么在第六个示例中想想有没有办法直接调用第四个示例的代码。作为一个优秀的开发者,肯定不要用前者了。

    我们先来看看第四个示例的代码

    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 所在的文件夹。

    执行之后结果如图:
    006tNc79gy1fzdcwalgpsj30u20k6k0x.jpg

    是不是很方便?
    到此,笔者的导出 UnityPackage 也就是我们的知识库,名字为: QFramework_20181103_05。

    那么我们的导出步骤可以更新了。

    原来是:

    1. 点击菜单栏 QFramework/4.导出 UnityPackage。

    现在变成了:

    1. 点击菜单栏 QFramework/6.MenuItem 复用。

    这个名字容易造成误导,不过没关系,这只是暂时的方案。我们之后还会改进导出逻辑的。

    小结

    到此,我们又节省了自己一点时间,假如每次打开文件夹需要 5 秒钟时间。那么 1000 个知识点就会节省 130 块钱。加上第四篇的 390,再加上第三篇的 130 我们总共赚了 650 块。

    虽然说得有点夸张,但是从小老师就告诉了我们一个简单的道理:“时间就是金钱”。

    转载请注明地址:凉鞋的笔记:liangxiegame.com

    更多内容

  • 相关阅读:
    iOS-Block的多种使用
    iOS-验证码倒计时60秒
    iOS-AFNetworking-上传图片
    Xcode 报错信息
    iOS-定时器
    iOS-开发技巧-页面布局
    iOS-nil,Nil,NULL的区别
    iOS-Debug
    iOS-NSDate
    iOS-生命周期
  • 原文地址:https://www.cnblogs.com/liangxiegame/p/12557221.html
Copyright © 2011-2022 走看看