Unity 遊戲框架搭建 (十一) 簡易AssetBundle打包工具(一)

最近在看Unity官方的AssetBundle(以下簡稱AB)的教程,也照著做了一遍,不過做出來的AssetBundleManager的API設計得有些不太習慣。目前想到了一個可行的解決方案。AB相關的內容有點多,所以為了良好的閱讀體驗,就把教程分為幾個小文章,一次寫一個點。

1. AssetBundle設置:

首先要確定一個專門打資源包用的目錄,我的框架定的目錄是

QArt/QAB,並存放了一些Prefab資源,如下所示。

然後選定TestAB目錄,將Inspector窗口的設置為如下圖所示:

一級名字為testab,二級擴展名為unity3d。

這樣AB就設置好了。

2. 製作編輯器工具。

這裡打包的核心API只有一個,就是

BuildPipeline.BuildAssetBundles (outPath, 0, EditorUserBuildSettings.activeBuildTarget);

貼上編輯器工具代碼:

using UnityEditor;using System.Collections;using UnityEngine;using System.IO;using System.Collections.Generic;namespace QFramework.Editor { public class QABEditor { [MenuItem("QFramework/AB/Build")] public static void BuildAssetBundle() { // AB包輸出路徑 string outPath = Application.streamingAssetsPath + "/QAB"; // 檢查路徑是否存在 CheckDirAndCreate (outPath); BuildPipeline.BuildAssetBundles (outPath, 0, EditorUserBuildSettings.activeBuildTarget); // 剛創建的文件夾和目錄能馬上再Project視窗中出現 AssetDatabase.Refresh (); } /// <summary> /// 判斷路徑是否存在,不存在則創建 /// </summary> public static void CheckDirAndCreate(string dirPath) { if (!Directory.Exists (dirPath)) { Directory.CreateDirectory (dirPath); } } }}

這個腳本要放在Editor目錄下!!!

這個腳本要放在Editor目錄下!!!

這個腳本要放在Editor目錄下!!!

使用方法:

點擊QFramework/AB/Build

之後,生成的AB包如下所示:

AB包就打好了,接下來開始測試AB包的使用。

3.測試:

代碼很簡單,如下所示,一些常識性的問題就不介紹了。

using UnityEngine;using System.Collections;using System.IO;namespace QFramework.Example { public class TestABEditor : MonoBehaviour { // Use this for initialization IEnumerator Start () { WWW www = new WWW ("file:///" + Application.streamingAssetsPath + Path.DirectorySeparatorChar + "QAssetBundle" + Path.DirectorySeparatorChar + "testab.unity3d"); yield return www; if (string.IsNullOrEmpty (www.error)) { var go = www.assetBundle.LoadAsset<GameObject> ("Canvas"); Instantiate (go); } else { Debug.LogError (www.error); } } // Update is called once per frame void Update () { } }}

運行結果:

最初版的打包工具就做好了,接下來到了吐槽的時刻了。

4.存在的問題:

1.不支持多平台,只能打當前PlayerSettings所設置的平台的AB包,有點麻煩。

2.需要手動設置AB包的名字和擴展名,這個問題完全可以交給代碼實現。

3.看不到整個工程究竟有哪些設置了AB包的名字,哪些沒設置,有些無關的資源誤操作設置了AB包名,要排查這種資源要花些時間。

4.測試的代碼中暴露的字元串太多了,其中包括AB包名,AB包路徑,要載入的資源名字,這些都可以集中管理或者生成代碼。

5.歡迎補充

這些問題在此後的文章中一步一步解決,希望大家多給些建議。

歡迎討論!

相關鏈接:

我的框架地址:github.com/liangxiegame

教程源碼:github.com/liangxiegame

QFramework&遊戲框架搭建QQ交流群: 623597263

轉載請註明地址:涼鞋的筆記liangxiegame.com/

微信公眾號:liangxiegame

weixin.qq.com/r/gjumvif (二維碼自動識別)

支持筆者:

如果覺得本篇教程或者 QFramework 對您有幫助,不妨通過以下方式贊助筆者一下,鼓勵筆者繼續寫出更多高質量的教程,也讓更多的力量加入 QFramework 。

  • 給 QFramework 一個 Star:github.com/liangxiegame
  • 下載 Asset Store 上的 QFramework 給個五星(如果有評論小的真是感激不盡):u3d.as/SJ9
  • 購買 gitchat 話題並給 5 星好評: gitbook.cn/gitchat/acti (6 元,會員免費)
  • 購買同名的蠻牛視頻課程並給 5 星好評:edu.manew.com/course/43 (目前定價 19 元,之後會漲價,課程會在 2018 年 6 月初結課)
  • 購買同名電子書 :kancloud.cn/liangxiegamframeworkdesign( 29.9 元,內容會在 2018 年 10 月份完結)

筆者在這裡保證 QFramework、入門教程、文檔和此框架搭建系列的專欄永遠免費開源。以上捐助產品的內容對於使用 QFramework 的使用來講都不是必須的,所以大家不用擔心,各位使用 QFramework 或者 閱讀此專欄 已經是對筆者團隊最大的支持了。

output/unity遊戲框架搭建

推薦閱讀:

如何在#define里使用"#"?
為什麼我覺得 Objective-C 的內存管理比 C++ 要複雜得多?這類語言是否是趨勢?
按C++ Prime裡面說的寫類Screen和Windows_mgr出現下面的錯誤,求大神解答?
求一本或者幾本比較詳細介紹C++11的書,《C++ Primer》是否合適?
在 C++ 中,為什麼通常使用複合賦值來實現算術運算符?

TAG:Unity遊戲引擎 | unity | C |