歡迎來到第二十六天!為了讓門市顧客在 4G/5G 弱網環境下也能 seconds 載入遊戲,我們實作 Asset Bundle 動態分包與載入。
我們將「大廳」放在 Main Bundle,將「青花瓷遊戲」與「雪花冰遊戲」設定為獨立的 Asset Bundle(如 game_ice):
// BundleManager.ts
import { assetManager, AssetManager } from 'cc';
export class BundleManager {
private static loadedBundles: Map<string, AssetManager.Bundle> = new Map();
public static loadSubGameBundle(bundleName: string, onProgress: (completed: number, total: number) => void): Promise<AssetManager.Bundle> {
return new Promise((resolve, reject) => {
// 若已載入則直接回傳
if (this.loadedBundles.has(bundleName)) {
resolve(this.loadedBundles.get(bundleName)!);
return;
}
// 非同步下載 CDN 上的 Bundle 子包
assetManager.loadBundle(bundleName, { onFileProgress: onProgress }, (err, bundle) => {
if (err) {
console.error(`Bundle ${bundleName} 載入失敗:`, err);
reject(err);
} else {
this.loadedBundles.set(bundleName, bundle);
console.log(`Bundle ${bundleName} 下載完成!`);
resolve(bundle);
}
});
});
}
}
Tech Tip:分包(Asset Bundle)能讓首頁包體從 15MB 降至 2.5MB。當玩家玩完「雪花冰遊戲」返回大廳時,可以呼叫
assetManager.removeBundle(bundle),將該小遊戲佔用的 VRAM 貼圖完全卸載,避免 iOS 設備因記憶體過高而閃退!