使用 creator2.4.3 assets bundle实现游戏大厅加子游模式思路

由于项目调整需要使用大厅+子游戏模式,在大体了解了2.4.3版本的bundle后,摸索这有了一个大体思路但是不清楚该方法是否可靠,还请各位大佬们指点一下。


1.大厅和子游戏项目进行了分离
2.通过热更新方式把子游戏子包下载到用户SD卡上然后通过加载本地子包方式进行加载
3.不需要修改main.js里的东西
4.测试过程中发现点一次点击一个子游戏进入后在返回大厅在点击另外一个子游戏时会执行上一个子游的代码资源,大体原因为由于每个子游戏差别不是特别大所以会提前制作一个模板,这样就导致了uuid的重复,想通过修改项目uuid进行解决发现项目不同也无法判断是否冲突,然后请教大佬们,说通过手动卸载脚本,最后小玉米大佬的方法通过修改引擎把loadedScripts暴露出来并赋值为undefined,进行解决
5.看官方cc.js.unregisterClass就能卸载已经在引擎中注册的脚本,所有把项目中的所有工具类,使用export class 名称 {}导出的类全部替换为一个常驻节点然后挂载上脚本,最后在进行销毁,这个方法导致项目没有以前简单明了更方便阅读
文采有限就写了下大体,很多细节没写到,请各位大佬说下这个方案是否可行以及后期会出现什么问题,有没有更好的解决方案,项目已经测试过,是可以进行加载更新的

4赞

关注大厅和子游戏是不同项目的解决方案。
上百个子游戏,没法放一个项目啊

现在就没有放在一个项目,都是分项目进行的,就是不知道会不会有问题

子游戏是配置为远程包吗?

子游戏不需要配置为远程包

请问为什么不用修改main.js?大厅和子游戏都不用改吗?

对,因为是加载的本地的子包

我理解你大厅自身是不热更的,所以不用改main.js是吗?

我是大厅更新版本直接进行强更的,没做大厅的热更,如果大厅要做热更的话就需要修改main.js了,子游戏是不需要main.js的

思路不错,唯一不好的就是公共类处理不是很优雅,但现在貌似没啥好办法

是的,没有一个很好的子游戏公共类处理方法,所以我把子游的全局变量 和static关键字都取消了采用常驻节点加脚本挂载来实现,不知道这块还有没有更好的办法

进入子游戏后,退回大厅,再次热更进子游戏,发现脚本没有更新,只有资源更新了,重启后脚本才更新。请问如何不重启也能更新子游戏脚本?
bundle.releaseAll();
cc.assetManager.removeBundle(bundle);
这些能释放掉脚本以便重新加载吗?

需要把脚本进行手动卸载然后修改引擎框架进行清除缓存

思路是这样的,但是怎么获取子游戏的下载进度?

比如我有一张背景图片,所有子游戏都要用这张图片,请问应该放哪里?是每个子游戏放一份吗?

脑壳疼 咋会提这个问题

自己写热更新的下载不就解决了

嗯,因为我考虑的是子项目独立

不知道你有没有关注过 子游戏退出内存是否能释放干净

子游戏返回时会把bundle包卸载释放资源,但是代码释放有点困惑,现在我利用cc.js.unregisterClass把脚本卸载,然后子游戏基本没有使用静态方法,说代码占用的内存很少,主要是图片资源,你可以测试下