[小明爬坑系列]AssetBundle原理介绍
一.簡介
Assetbundle 是Unity Pro提供提供的功能,它可以把多個游戲對象或者資源二進制文件封裝到Assetbundle中,提供了封裝與解包的方法使用起來很便利。
二.移動平臺特點
Assetbundle是可以把預制,文件以及場景都打包到Assetbundle中去的,但是在移動平臺上,有諸多限制.
首先,移動平臺上雖然能打包場景,但是因為移動平臺是不更新腳本的,所以即使是更新了,新增加的腳本也不會執行.如果需要做熱更新,會有其他的辦法.
第二,因為移動平臺上不能通過這種方式直接更新腳本,所以在對腳本進行大更新的時候,需要將更新腳本的大更新放應用市場,小版本更新用Assetbundle.
第三,在對不同的平臺進行打包的時候,需要設定打包目標平臺,即參數:BuildTarget,打完包之后的數據不同平臺之間不能通用.
三.打包數據的存儲
因為打包后一般先將數據暫時放置在StreamingAssets下,但是不同平臺下StreamingAssets的路徑是不同的,是十分需要注意的,在面對不同平臺的時候,加載的路徑是要不同的.在移動平臺中,,因為StreamingAssets是只讀的,所以在項目中,要將數據放到沙盒文件夾下.操作步驟如下:
1.打包出來的Assetbundle我們自己用LZMA壓縮,上傳到服務器上。
2.IOS或者Android下載這些assetbundle
3.解壓縮這些assetbundle并且保存在Application.persistentDataPath 目錄下。
4.以后通過AssetBundle.CreatFromFile ?讀取assetbundle。
四.總結
對游戲中所有資源進行打包,比如按類型分為五個大部分? 界面,模型,特效,聲音,場景,腳本。
1.界面部分:
公用資源包(可復用的資源包)和 每個界面獨有得資源包(不可復用的資源包)統一使用Prefab 打包成.assetbundle 二進制格式。
2.模型部分:
按角色分類,統一使用Prefab 打包成.assetbundle 二進制格式。 模型部分包括模型文件與動畫文件,每一個模型文件對應一組動畫文件。(如果模型需要換裝還需提供對應換裝的模型與貼圖) ,因為unity4的重定向動畫不支持動態加載,所以目前不需要考慮 不同大小 不同規格 不同性別 的模型重定向動畫。
3.特效部分: 統一使用Prefab 打包成.assetbundle 二進制格式。?
4.聲音部分: 統一使用Prefab 打包成.assetbundle 二進制格式。?
5.場景部分:場景和前面的有點區別,場景需要導出烘培的光信息并且只能烘培場景之上永遠不動的模型,但是這些永遠不動的模型有可能會同時在多個場景中使用,所以場景烘培完畢后要把重復使用的對象刪除,(運行游戲在動態的加載進來)場景中只保留該場景中永遠不會變的模型,以及烘培的光照信息。 打包場景后會生成.unity3D 二進制格式,它和 assetbundle 打包方式是不同的。(另外,也可以考慮 json xml 二進制 來動態組裝場景)。 ?
6.腳本部分:如果Prefab上是帶腳本打包Assetbundle的話? 腳本是不會被運行的(移動平臺), 但是unity有一個技巧,Prefab上的腳本 如果本地有的話它會把本地的同名腳本綁定在Prefab對象上,它會很好的執行。?
7.Prefab打包技巧: Prefab打包時自身是不占多少空間的 <=1KB? 但是Prefab上是可以關聯? 這五大部分 “界面,模型,特效,聲音,場景,腳本”以及在Hierarchy視圖中 坐標/縮放/旋轉。 關聯這些信息以后就會很大,所以為了避免資源的浪費盡量避免Prefab重復關聯。
一個prefab下面可以同時關聯多個游戲對象 ,這里舉個例子如果你的 Prefab下面放了一個模型 它的大小可能是500k? ,在 Prefab下面放了十個完全相同模型 它的大小可能是501k 。 如果Prefab下面放了兩個不同的模型,它的大小可能就會是 500k x 2 的size? ,也就是說Prefab與關聯的數量是無關的 。?
8.加密部分: assetbundle 是可以轉換成 字節數組 ,客戶端與服務器約定一組解密 字節數組的算法就可以實現資源加密。
轉載于:https://www.cnblogs.com/WongSiuming/p/5082638.html
總結
以上是生活随笔為你收集整理的[小明爬坑系列]AssetBundle原理介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清新薄荷复古裙多少钱?
- 下一篇: GDB调试进阶