跟諸子學(xué)游戲 Unity3d熱更新

AssertBundle :https://docs.unity3d.com/Manual/AssetBundlesIntro.html

簡言之就是,在開發(fā)時將一些較大的資源使用assertbundle技術(shù)壓縮打包,并且放在服務(wù)器上面,通過MD5校驗碼和本地文件比對,將本地和服務(wù)器不同的文件下載下來,并且刪除本地文件,這樣就是資源熱更新.通過assertbundle加載文件,使之可以在unity里面使用.

MD5和打包之后的文件

后綴名為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)行卸載.其他方式盡量不要使用.


性能分析


內(nèi)存分析

主要是用加載的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文檔教程.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末环鲤,一起剝皮案震驚了整個濱河市纯趋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖吵冒,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纯命,死亡現(xiàn)場離奇詭異,居然都是意外死亡痹栖,警方通過查閱死者的電腦和手機(jī)亿汞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揪阿,“玉大人疗我,你說我怎么就攤上這事∧衔妫” “怎么了吴裤?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長溺健。 經(jīng)常有香客問我麦牺,道長,這世上最難降的妖魔是什么鞭缭? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任枕面,我火速辦了婚禮,結(jié)果婚禮上缚去,老公的妹妹穿的比我還像新娘。我一直安慰自己琼开,他們只是感情好易结,可當(dāng)我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柜候,像睡著了一般搞动。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渣刷,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天鹦肿,我揣著相機(jī)與錄音,去河邊找鬼辅柴。 笑死箩溃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碌嘀。 我是一名探鬼主播涣旨,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼股冗!你這毒婦竟也來了霹陡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烹棉,沒想到半個月后攒霹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡浆洗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年催束,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辅髓。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡泣崩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洛口,到底是詐尸還是另有隱情矫付,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布第焰,位于F島的核電站买优,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挺举。R本人自食惡果不足惜杀赢,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望湘纵。 院中可真熱鬧脂崔,春花似錦、人聲如沸梧喷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铺敌。三九已至汇歹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間偿凭,已是汗流浹背产弹。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留弯囊,地道東北人痰哨。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像匾嘱,于是被迫代替她去往敵國和親作谭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理奄毡,服務(wù)發(fā)現(xiàn)折欠,斷路器,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • This article is a record of my journey to learn Game Deve...
    蔡子聰閱讀 3,768評論 0 9
  • feisky云計算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,833評論 0 5
  • 本文原創(chuàng)版權(quán)歸 博客園吳秦所有锐秦,此處純粹技術(shù)收藏咪奖,如有再轉(zhuǎn),敬請于顯示位置標(biāo)明原創(chuàng)作者及出處酱床,以示尊重Q蛘浴! 作者:...
    Magic_Dong閱讀 4,560評論 0 7
  • 女生之間的友情扇谣,會比愛情還轟轟烈烈昧捷。 女生大多數(shù)都有嫉妒心、猜忌罐寨、八卦靡挥、虛榮、小氣鸯绿、毒蛇等等跋破。所以女人復(fù)雜,女人多...
    一個人的春夏秋冬閱讀 611評論 0 1