一文教你搞懂Cocos creator热更新

前言

今天我们来一起来说说热更新,谈起热更新,大家都觉得很难,都去找官方的热更新的解决方案,然后对着一步一步搞,原理还是不懂, 今天小编就带你来完整的讲解一下热更新的原理,搞懂原理,做热更新可以自己做,也可以自己修改,比如大厅与子游戏的模式。 这个原理经过测试,可以适用js, Lua等多种脚本语言。

1: 热更新准备活动

H5游戏不需要热更新,因为本身就是从服务器下载的,而只有Native开发里面需要热更新。

运行时动态加载的语言脚本才可以实现热更新,例如,js , Lua等;

每个native 的app 都有一个写的目录,可以用来放资源和代码; 这个cocos creator fileUtils都有对应的接口;

每个脚本语言都有一个searchPath,运行时根据搜索路径到这些路径下来装载文件。fileUtils 也有searchPath, 资源文件加载的时候,也是从searchPath里面的路径开始寻找资源。

2: 增量下载系统:

增量指的是客户端版本与服务器版本有差异的内容,每次更新,只更新客户端与服务器的差异,来节省流量和下载时间,所以我们做增量下载系统的时候,资源包(代码+资源)要做类似的设计:

(1) 资源列表, 记录了版本号, 记录了这个版本每个文件的一些信息,路径, MD5值,等信息;

(2) 完整的资源包;

第一次打包客户端的时候,也会带上这个当前客户端的包的资源列表。

客户端增量更新逻辑: 客户端先读取客户端当前最新资源列表(先到下载路径下找,再到包里找), 找到后和服务器上的比对, 根据md5值和客户端列表里缺的文件,得到一个下载更新列表, 然后根据更新列表来从服务器下载文件。最后将服务器的资源列表更新到本地,下次启动就不用再更新了。附上资源列表的结构截图

资源列表的结构截图


3: 使用最新源码和资源:

在启动脚本的时候,添加搜索路径,把热更新下载的路径,添加到前面,这样,系统搜索资源的时候,都从下载路径开始搜索,

这样你更新的数据和文件就被优先加载进来,实现到热更新,附上启动脚本的修改截图:

启动脚本的修改截图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos Creator 支持热更新,可以通过远程服务器更新游戏代码和资源。以下是一些基本步骤: 1. 在 Cocos Creator 中构建项目时,勾选“生成版本清单”选项,以生成一个项目版本清单文件。 2. 将项目版本清单文件和需要更新的资源上传到远程服务器上。 3. 在游戏中添加热更新代码,用于下载和载入远程服务器上的新资源。 以下是一个简单的热更新代码示例: ```javascript cc.Class({ extends: cc.Component, properties: { manifestUrl: cc.RawAsset, progressBar: cc.ProgressBar, progressLabel: cc.Label, }, onLoad () { this.updateManager = cc.assetManager.remoteDownloader.create(this.manifestUrl); this.updateManager.on('progress', this.onProgress, this); this.updateManager.on('error', this.onError, this); this.updateManager.on('finish', this.onFinish, this); this.updateManager.update(); }, onProgress (event) { this.progressBar.progress = event.detail.progress; this.progressLabel.string = `正在更新 ${Math.round(event.detail.progress * 100)}%`; }, onError (event) { cc.error(`更新失败: ${event.detail}`); }, onFinish () { cc.log('更新完成'); cc.game.restart(); }, }); ``` 在代码中,我们使用 `cc.assetManager.remoteDownloader` 创建一个 `updateManager` 对象,并监听其 `progress`、`error` 和 `finish` 事件。在 `onLoad` 函数中,我们调用 `updateManager.update()` 方法开始下载并更新远程服务器上的资源。在 `onProgress` 函数中,我们更新进度条和进度文本,以便用户可以看到下载进度。在 `onError` 函数中,我们记录错误信息并在控制台输出。在 `onFinish` 函数中,我们提示用户更新完成,并重启游戏以载入新资源。 请注意,以上示例只是一个简单的热更新实现,实际场景中可能需要更多的安全检查和错误处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值