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.歡迎補充這些問題在此後的文章中一步一步解決,希望大家多給些建議。
歡迎討論!
相關鏈接:
我的框架地址:https://github.com/liangxiegame/QFramework
教程源碼:https://github.com/liangxiegame/QFramework/tree/master/Assets/HowToWriteUnityGameFramework/
QFramework&遊戲框架搭建QQ交流群: 623597263
轉載請註明地址:涼鞋的筆記http://liangxiegame.com/
微信公眾號:liangxiegame
http://weixin.qq.com/r/gjumvifEAHp-rWPd926Q (二維碼自動識別)
支持筆者:
如果覺得本篇教程或者 QFramework 對您有幫助,不妨通過以下方式贊助筆者一下,鼓勵筆者繼續寫出更多高質量的教程,也讓更多的力量加入 QFramework 。
- 給 QFramework 一個 Star:https://github.com/liangxiegame/QFramework
- 下載 Asset Store 上的 QFramework 給個五星(如果有評論小的真是感激不盡):http://u3d.as/SJ9
- 購買 gitchat 話題並給 5 星好評: http://gitbook.cn/gitchat/activity/5abc3f43bad4f418fb78ab77 (6 元,會員免費)
- 購買同名的蠻牛視頻課程並給 5 星好評:http://edu.manew.com/course/431 (目前定價 19 元,之後會漲價,課程會在 2018 年 6 月初結課)
- 購買同名電子書 :https://www.kancloud.cn/liangxiegame/unityframeworkdesign( 29.9 元,內容會在 2018 年 10 月份完結)
筆者在這裡保證 QFramework、入門教程、文檔和此框架搭建系列的專欄永遠免費開源。以上捐助產品的內容對於使用 QFramework 的使用來講都不是必須的,所以大家不用擔心,各位使用 QFramework 或者 閱讀此專欄 已經是對筆者團隊最大的支持了。
output/unity遊戲框架搭建
推薦閱讀:
※如何在#define里使用"#"?
※為什麼我覺得 Objective-C 的內存管理比 C++ 要複雜得多?這類語言是否是趨勢?
※按C++ Prime裡面說的寫類Screen和Windows_mgr出現下面的錯誤,求大神解答?
※求一本或者幾本比較詳細介紹C++11的書,《C++ Primer》是否合適?
※在 C++ 中,為什麼通常使用複合賦值來實現算術運算符?