找回密碼
 注冊帳號

掃一掃,訪問微社區

涼鞋同學 Unity 游戲框架搭建 2019 (六) MenuItem 復用

0
回復
71
查看
打印 上一主題 下一主題
[ 復制鏈接 ]
排名
2324
昨日變化

63

主題

508

帖子

2429

積分

Rank: 9Rank: 9Rank: 9

UID
148923
好友
66
蠻牛幣
2598
威望
0
注冊時間
2016-5-17
在線時間
836 小時
最后登錄
2020-3-31

專欄作家

QQ

馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區。

您需要 登錄 才可以下載或查看,沒有帳號?注冊帳號

x
在上一篇中我們搞定了直接彈出文件夾功能,那么在這篇我們試著把它集成到我們導出步驟了。
那么我們要在第四個示例上直接加入代碼嘛?
不是的,從筆者寫教程的角度來講,這樣做會造成一個問題。教程和示例是一起發布的,如果在第四個示例上直接加入代碼,那么,如果剛剛看完第四個篇教程的同學,去翻代碼的時候,結果第四個示例根本看不懂,這樣很容易造成困惑。
而這個框架搭建系列專欄作為筆者打算寫一年的年度大專欄,這才剛到第六篇文章就要改之前的代碼,是不允許這樣做的:)。所以呢這部分只能做一點妥協。
要么在第六個示例中把第四個示例的核心代碼復制過來,要么在第六個示例中想想有沒有辦法直接調用第四個示例的代碼。作為一個優秀的開發者,肯定不要用前者了。
我們先來看看第四個示例的代碼
[C#] 純文本查看 復制代碼
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 如下:
[C#] 純文本查看 復制代碼
EditorApplication.ExecuteMenuItem("QFramework/4.導出 UnityPackage");

只要執行這行代碼,就可以執行示例四的邏輯了,也就是一鍵導出 unitypackage 的邏輯。
我們的今天的示例代碼如下:
[C#] 純文本查看 復制代碼
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。
那么我們的導出步驟可以更新了。
原來是:
  • 點擊菜單欄 QFramework/4.導出 UnityPackage。
現在變成了:
  • 點擊菜單欄 QFramework/6.MenuItem 復用。
這個名字容易造成誤導,不過沒關系,這只是暫時的方案。我們之后還會改進導出邏輯的。
小結
到此,我們又節省了自己一點時間,假如每次打開文件夾需要 5 秒鐘時間。那么 1000 個知識點就會節省 130 塊錢。加上第四篇的 390,再加上第三篇的 130 我們總共賺了 650 塊。
雖然說得有點夸張,但是從小老師就告訴了我們一個簡單的道理:“時間就是金錢”。
轉載請注明地址:涼鞋的筆記:liangxiegame.com
更多內容
  • QFramework 地址:https://github.com/liangxiegame/QFramework
  • QQ 交流群:623597263
  • Unity 進階小班
    • 主要訓練內容:
      • 框架搭建訓練(第一年)
      • 跟著案例學 Shader(第一年)
      • 副業的孵化(第二年、第三年)
    • 權益、授課形式等具體詳情請查看《小班產品手冊》:https://liangxiegame.com/master/intro
  • 關注公眾號:liangxiegame 獲取第一時間更新通知及更多的免費內容。


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊帳號

本版積分規則

神马电影34pp影视午夜