AssertBundle :https://docs.unity3d.com/Manual/AssetBundlesIntro.html
簡言之就是,在開發(fā)時將一些較大的資源使用assertbundle技術(shù)壓縮打包,并且放在服務(wù)器上面,通過MD5校驗碼和本地文件比對,將本地和服務(wù)器不同的文件下載下來,并且刪除本地文件,這樣就是資源熱更新.通過assertbundle加載文件,使之可以在unity里面使用.
后綴名為manifest的文件存儲的是當(dāng)前文件的信息,以及依賴關(guān)系.
AssetBundle的壓縮格式:LZMA格式,LZ4格式,不壓縮? ??AssetBundle的標(biāo)準(zhǔn)(默認(rèn))壓縮格式便是LZMA,LZMA是一種序列化流文件,包體積最小,高壓縮比,會增加解壓縮的時間. 由于LZ4的壓縮比一般满粗,因此經(jīng)過壓縮后的AssetBundle包體的體積較大,該算法基于chunk,LZ4格式的好處在于解壓縮的時間相對要短落竹。在打包的時候開啟BuildAssetBundleOptions.ChunkBasedCompression即可。BuildAssetBundleOptions.UncompressedAssetBundle為不壓縮
使用方式:
一:隨游戲一同發(fā)布的AssetBundle(一般位于StreamingAssets文件夾中):在打AssetBundle包時仅炊,使用LZ4壓縮格式進(jìn)行打包(開啟BuildAssetBundleOptions.ChunkBasedCompression即可)部脚。在運行時需要加載AssetBundle對象時姻采,使用LoadFromFile方法進(jìn)行加載做祝。這樣做的好處是:即可以將AssetBundle文件壓縮近尚,又可以兼顧加載速度蠕啄,且節(jié)約內(nèi)存。
二:從服務(wù)端下載的AssetBundle:在打AssetBundle包時戈锻,使用默認(rèn)的LZMA格式壓縮,使用WWW.LoadFromCacheOrDownload方法下載并緩存AssetBundle包文件,這樣做的好處是:獲得了最大的壓縮率歼跟,在下載過程中可以減少數(shù)據(jù)傳輸量。同時格遭,在本地磁盤創(chuàng)建緩存之后哈街,又可以兼顧之后的加載速度,且節(jié)約內(nèi)存拒迅。
三:我們自己進(jìn)行加密的AssetBundle:在打AssetBundle包時骚秦,使用LZ4壓縮格式進(jìn)行打包(開啟BuildAssetBundleOptions.ChunkBasedCompression即可)。在運行時需要加載AssetBundle對象時璧微,使用LoadFromMemory方法進(jìn)行加載作箍。(這也是從內(nèi)存中使用流數(shù)據(jù)加載AssetBundle對象的僅有的使用場景。)
四:我們自己壓縮的AssetBundle:我們自己也可以使用第三方庫或工具對生成的AssetBundle包文件進(jìn)行壓縮前硫,如果需要這樣做胞得,則我們最好不要再使用Unity3D對AssetBundle進(jìn)行壓縮,因此在打包時選擇開啟BuildAssetBundleOptions.UncompressedAssetBundle开瞭。在運行時需要加載AssetBundle對象時懒震,使用LoadFromFileAsync方法進(jìn)行異步加載罩息。
五:對于需要常駐內(nèi)存的Bundle文件來說,優(yōu)先考慮減小內(nèi)存占用,因此對于存放非Prefab資源(特別是紋理)的Bundle文件个扰,可以考慮使用WWW.LoadFromCacheOrDownload或AssetBundle.LoadFromFile加載,從而避免WebStream常駐內(nèi)存,而對于存放較多Prefab資源的Bundle瓷炮,則考慮使用new WWW加載,因為這類Bundle用WWW.LoadFromCacheOrDownload加載時產(chǎn)生的SerializedFile可能會比new WWW產(chǎn)生的WebStream更大。
六:對于加載完后即卸載的Bundle文件递宅,則分兩種情況:優(yōu)先考慮速度(加載場景時)和優(yōu)先考慮流暢度(游戲進(jìn)行時)娘香。1)加載場景的情況下,需要注意的是避免WWW對象的逐個加載導(dǎo)致的CPU空閑办龄,可以考慮使用加載速度較快的WWW.LoadFromCacheOrDownload或AssetBundle.LoadFromFile,但需要避免后續(xù)大量地進(jìn)行Load資源的操作烘绽,引起IO開銷(可以嘗試直接LoadAll)。2) 游戲進(jìn)行的情況下俐填,則需要避免使用同步操作引起卡頓安接,因此可以考慮使用new WWW配合AssetBundle.LoadAssetAsync來進(jìn)行平滑的資源加載,但需要注意的是英融,對于Shader盏檐、較大的Texture等資源,其初始化操作通常很耗時驶悟,容易引起卡頓胡野,因此建議將這類資源在加載場景時進(jìn)行預(yù)加載。
使用Resources.Unload(obj)/AssetBundle.Unload(bool )/WWW.Dispose()來進(jìn)行卸載.其他方式盡量不要使用.
主要是用加載的API是?UnityWebRequest 和AssetBundle.LoadFromFile.
XLua: 屬性和靜態(tài)方法用 . 調(diào)用,txt文件必須是UTF-8格式的,不是這樣的格式,有時候加載不出來.
using XLua;引用庫??LuaEnv 相當(dāng)于lua虛擬機(jī)? DoString(string chunk, string chunkName = "chunk", LuaTable env = null) 加載lua腳本?Dispose()銷毀lua虛擬機(jī);Tick定時清除Lua的未手動釋放的LuaBase(比如痕鳍,LuaTable硫豆, LuaFunction),以及其它一些事情笼呆。在update中調(diào)用;loader:就一個回調(diào)熊响,其類型為delegate?byte[]?CustomLoader(ref?string?filepath),當(dāng)一個文件被require時诗赌,這個loader會被回調(diào)耘眨,其參數(shù)是require的參數(shù),如果該loader找到文件境肾,可以將其讀進(jìn)內(nèi)存剔难,返回一個byte數(shù)組。如果需要支持調(diào)試的話奥喻,而filepath要設(shè)置成IDE能找到的路徑(相對或者絕對都可以)LuaEnv的使用建議:全局就一個實例偶宫,并在Update中調(diào)用GC方法,完全不需要時調(diào)用Dispose.具體的請看xlua文檔教程.