- 2.4.x 版本的 AssetBundle 為了兼容舊版本,也保留有
cc.resources
仅颇,但 resources
也是一個內(nèi)置 Bundle,會在引擎加載時加載
- 2.4.x 版本的
cc.assetManager.loadBundle
只會加載 Bundle 的配置文件瑰抵,加載完畢會返回一個 Bundle 對象橱赠,可以通過這個對象來加載 Bundle 內(nèi)的資源:
//cc.Asset 為指定類型,如果加載文件夾蕉世,將會只返回指定類型的資源
//loadDir 會加載文件夾下所有資源蔼紧,包括子文件夾
bundle.loadDir(assetUrl, cc.Asset, (finish: number, total: number) => {
}, (error: Error, asset: cc.Asset) => {
});
bundle.load(assetUrl, cc.Asset, (finish: number, total: number) => {
}, (error: Error, asset: cc.Asset) => {
});
- 2.4.x 版本的
cc.assetManager.loadRemote
遠(yuǎn)程下載單個文件可以通過在 options
中添加 {onFileProgress:(loaded, total) => {} }
來獲取下載進度。
cc.assetManager.loadRemote(url, {
onFileProgress: (loaded: number, total: number) => {
console.log(loaded / total);//獲取進度
}
}, (error: Error, asset: cc.Asset) => {
});
但是因為下載遠(yuǎn)程文件用的 XMLHttpRequest
所以必須在服務(wù)器端做好相關(guān)配置讨彼。如果沒有辦法添加則可以繼續(xù)使用 cc.loader.load
來加載遠(yuǎn)程資源歉井,截至2.4.3該API還沒有移除。
-
cc.assetManager.loadBundle
可以加載本地 Bundle 哈误,開發(fā)時可以直接構(gòu)建然后加載 AssetBundle 包進行測試
cc.assetManager.loadBundle("D:/build/Bundle", null, (err: Error, bundle: cc.AssetManager.Bundle) => {
});
- AssetBundle 可以包含代碼,但是使用時不可以直接引用 Bundle 包里面的類躏嚎,Budnle 包里的腳本也不可以直接引用外部腳本蜜自,否則會導(dǎo)致腳本被打包到主包,使用時需要使用
node.getComponent('className');
的方式來獲取腳本實例
- AssetBundle 的版本號就是打包出來之后中間的這段字符串
config.版本號.json
index.版本號.js
若勾選md5卢佣,則會自動添加md5字符串重荠,也可以手動填寫,如 index.1.0.js
加載時版本號填寫 {ver: '1.0'}
即可
- 可以通過以下代碼獲取bundle中所有資源路徑虚茶,且不需要加載資源
//_config為私有屬性戈鲁,不推薦使用仇参,但當(dāng)前官方并未提供獲取api
let map = bundle._config.paths._map;
let tmpArr = [];
for (var item in map) {
tmpArr.push(item);
}
console.log(tmpArr);//["path1","path2","path3/path"];
- AssetBundle 使用
loadDir
加載文件夾時,如果文件夾下有子文件夾婆殿,會導(dǎo)致進度回調(diào)中的 total
字段隨著加載增加诈乒,會出現(xiàn) finish/total
獲取的進度不準(zhǔn)確
-
cc.assetManager.bundles
可以查看當(dāng)前已加載的所有 bundle
- AssetBundle 加載的代碼資源無法清除緩存,加載的 Bundle 內(nèi)若有與現(xiàn)有腳本同名的腳本則會報錯
- AssetBundle 打包的時候需要設(shè)置目標(biāo)平臺為對應(yīng)平臺婆芦,否則可能出現(xiàn)資源加載問題