【Assetbundle創(chuàng)建與加載】
Unity有兩種動(dòng)態(tài)加載機(jī)制:一種是Resource.Load。一種是AssetBundle买置。Assetbundle是Unity Pro提供的功能,它可以把多個(gè)游戲?qū)ο蠡蛘哔Y源二進(jìn)制文件封裝到Assetbundle中翩腐。供加載窃肠、解壓使用。
【創(chuàng)建Assetbundle】
使用方法?BuildPipeline.BuildAssetBundle (Object, assets , pathName , options , targetPlatform)
參數(shù)1:它只能放一個(gè)對(duì)象垛玻。
參數(shù)2:可以放入一個(gè)數(shù)組對(duì)象。
參數(shù)3:保存路徑奶躯。
參數(shù)4:BuilderAssetBundleOptions
CollectDependencies //?包含所有依賴關(guān)系帚桩。
CompleteAssets//強(qiáng)制包含整個(gè)資源
DisableWriteTypeTree//在資源包不包含類型信息。
DeterministicAssetBundle//編譯資源包使用一個(gè)哈希表儲(chǔ)存對(duì)象ID在資源包中嘹黔。
UncompressedAssetBundle//不壓縮Assetbundle账嚎,默認(rèn)會(huì)進(jìn)行壓縮
參數(shù)5:平臺(tái)
特別注意的是,電腦上和手機(jī)上打出來的Assetbundle不能混用,不同平臺(tái)只能用自己的郭蕉。
【載入Assetbundle】
使用方法:
1)WWW bundle = new WWW(path);
2)WWW bundle = WWW.LoadFromCacheOrDownload(path, fileVer);
載入成功后就可以通過資源名使用bundle.assetBundle.Load方法獲取資源疼邀。
如下圖所示
使用Assetbundle.Load會(huì)從Assetbundle的內(nèi)存鏡像中讀取并創(chuàng)建一個(gè)Asset對(duì)象,創(chuàng)建的同時(shí)會(huì)分配相應(yīng)的內(nèi)存用于反序列化存儲(chǔ)召锈。
【內(nèi)存釋放】
最后在使用Assetbundle時(shí)候最好的方式是旁振。
創(chuàng)建時(shí):使用Assetbundle.load加載所需的asset,加載完后立即Assetbundle.Unload(false),釋放Assetbundle文件本身的內(nèi)存鏡像涨岁,但不銷毀加載的Asset對(duì)象拐袜。這樣遍可以釋放一部分內(nèi)存。
釋放時(shí)梢薪。如果是通過Instantiate的對(duì)象蹬铺,用Destroy進(jìn)行銷毀。在合適的地方使用
Resources.UnloadUnusedAssets,釋放已經(jīng)沒有引用的Asset沮尿。Unity底層會(huì)對(duì)對(duì)象引用進(jìn)行計(jì)數(shù)丛塌,如果引用為0.執(zhí)行
UnloadUnusedAssets就可以全部釋放较解。
【使用要點(diǎn)】
1畜疾、AssetBundle會(huì)使用Lzma壓縮。
2印衔、Resource下的資源發(fā)布時(shí)會(huì)變成resources.assets文件啡捶,2G磁盤大小限制。首次完全下載奸焙,不可更新瞎暑。
3、AssetBundle的本地磁盤緩存可多達(dá)4G与帆,除了Web版只能50M了赌。
4、兼容性玄糟。
5勿她、AssetBundle創(chuàng)建方法:
6、BundleOption的區(qū)別阵翎。
7逢并、AssetBundle.CreateFromMemory()速度慢。
8郭卫、AssetBundle.CreateFromFile只能加載非壓縮的AssetBundle砍聊。
9、LoadLevel方法詳解:
10贰军、AssetBundle的釋放玻蝌。