
基础篇
设置 Bundle#
在资源管理器中选中任一文件夹,可以看到属性面板可以设置它为 Bundle 的选项
![]()
当设置文件夹为 Bundle 后,构建后输出目录会存在对应的 Bundle 文件夹
![]()
如果你不删除这些 Bundle 文件夹,那么打包后这些即为本地 Bundle
构建后 bundle 内容分为两种情况:
- 非小游戏:构建后 Bundle 文件夹内包含了对应项目文件夹中的所有资源、代码
- 小游戏:由于小游戏平台限制代码动态加载,所以构建后 Bundle 文件夹只存在资源,而原本 Bundle 内的代码都在主包
构建 Bundle#
热更 Bundle 必须使用版本号,也就是 MD5,在构建选项勾选 MD5 缓存
![]()
然后在构建输出的 Bundle 目录你可以看到
![]()
其中 index.dead1.js 中的 dead1 就是 Bundle 的版本号
热更篇
首先你需要一个远程文件服务器,例如阿里云的 OSS
检测更新#
首先在远程文件服务器添加一个 Bundle 版本文件,其中存储 Bundle 名和最新的版本号,例如
{
"Decorator": "abcd2"
}
然后在游戏内通过 http 请求拉取远程版本文件可以获取最新的版本号,
再通过 cc.assetManager.downloader.bundleVers["bundle名"] 获取本地的 Bundle 版本进行对比,
如果不一致则代表可以进行热更
进行热更#
如果你想要热更 Bundle,除了版本文件外,你还得把构建后的 Bundle 目录放在远程文件服务器上,
例如 Decorator Bundle 的 index 文件地址为 https://abcd.com/Decorator/index.dead1.js,
那么 Decorator Bundle 的远程地址即为 https://abcd.com/Decorator,然后可以调用如下代码进行 Bundle 热更
mk.bundle.reload({
bundleStr: 'Decorator',
originStr: 'https://abcd.com/Decorator',
versionStr: 'dead1',
});
热更顺序#
Bundle 热更需要注意顺序问题,以 A、B 两个 Bundle 举例,B 使用了 A 的脚本, 那么正确的热更顺序就应该为 A -> B,如果你先热更 B,再热更 A,那么 B 使用的 A 脚本还是上个版本的 A 脚本