分享一个脚本热更新解决方案

常看到有同学在提游戏热更新的问题,本人在使用C++版热更时碰到许多问题,维护起来相当费时间,后来决定通过脚本实现一套解决方案应用到自己项目中,提供热更代码和热更配置文件生成的工具。

分享给大家

https://github.com/BainaGame/CocosCreator_ScriptHotUpdate

19赞

手动帮顶,顶你个肺

支持!! 還沒有嘗試過C++熱更新,先收藏 :slightly_smiling:

大神 demo 出现 game is not defined

mark 一下

这个必须顶,顶顶顶

请问这个怎么安装?
还有这个热更新跟官方的热更新有什么不同?

我是从项目中COPY出来的,你把路径改了,这个没用

热更脚本代码在assets/script文件下AssetsManager.js、AssetsDownload.js两个文件,代码上注释比较全
游戏热更代码主要就这两个,里面有一个HotUpdateManager.js 可以参考我的使用方式,代码不多,里面就是一个对列下载多个模块的逻辑

var am = new AssetsManager();
am.name = name;
am.on(game.AssetEvent.NEW_VERSION , onNewVersion);
am.on(game.AssetEvent.PROGRESS , onProgress);
am.on(game.AssetEvent.FAILD , this._onFailed.bind(this));
am.on(game.AssetEvent.NEW_VERSION_FOUND , this._onCheckComplete.bind(this));
am.on(game.AssetEvent.SUCCESS , this._onUpdateComplete.bind(this));
am.on(game.AssetEvent.REMOTE_VERSION_MANIFEST_LOAD_FAILD, this._onNetError.bind(this));
am.on(game.AssetEvent.REMOTE_PROJECT_MANIFEST_LOAD_FAILD, this._onNetError.bind(this));
am.on(game.AssetEvent.NO_NETWORK , this._onNetError.bind(this));
am.check(name);

和官方的API差不多,我和官方用的配置文件都是基本一样的

热更工具代码在packages/hot_update文件下
工具代码放到你自己项目中的packages中就行了,你自己项目的目录不一样,要改下脚本里的路径,有注释

解决了C++版本一些不稳定问题
降低自定义需求的维护成本
可以说是C++版本的一个优化,更新原理是一样的,现在1.4版引擎可以直接用C++版的Downloader组件,可以把脚本中的下载改成C++版的。这样性能会好一点点。这个有兴趣的同学可以试下,这个改动在我这代码里就几句话,之样设计时就预留官方有一开会这样做的。

1赞

我更新了代码,你可以重下载看下,game是库的一个包头,如果你在你代码中用,你可以加上window.game = window.game || {};

大神能不能详细说明下这些参数的用途啊?
比如:“// 项目初始热更配置文件路径”,这个路径是是指本地project.manifest version.manifest的路径?如果是,这个2个文件要通过什么方式生成呢?
主要是我这里在生成配置文件的时候报错如下,不知道该咋弄了。。。

文件夹路径不对,上面写得很清了,这里的common_project,是我项目里的资源文件文件夹在resources文件下有个common,你的游戏更具你的文件夹名改下就行了。

我这个脚本可以支持多模块配置生成,每个模块就是一个热更对象,游戏用到时自己出发更新

能看下完整项目的目录结构么?生成热更总是失败啊

为什么没有assets路径,和searchPaths路径

看下你的项目中和热更新有关的目录结构,原始的那个,不是运行热更脚本生成后的

assets是用工具生成的,searchPaths 我这没扩展,你可以自己加

看了下代码,跟我用js实现的基本一样,不过楼主的要完善很多,不知道楼主这套商业化用了多久了?

快半年,平时也有优化,现在扩展编辑器功能,已集成到Creator中,通过界面操作了,容易让其它人使用