在网上查找了很多的大厅子游戏热更新模式方案,但是基本都是分成两个项目,这样的开发非常不好处理,不像以前的lua开发,可以同时在一个项目里进行开发,采用分项目的模式会造成子游戏与大厅的代码不好切割,比如大厅已经包含了一部分的公共代码,而子游戏里也会用到,这时,每开发一个新游戏就不能使用了,还得在自己提取一些公共的代码,每个人的做法都有自己的一套,这就造成了代码的混乱与不好管理,所以自己尝试了在同一个项目是否可以进行大厅子游戏模式的热更,在此提供自己的一些主要思路
1:把子游戏作分包处理,构建后会在subpackags目录下有对应子包的文件,用子包模式主要是所需要用到的子游戏的代码和raw-assets里面的资源都归到一个游戏当中管理,当子游戏需要更新时,不会影响到大厅
2:把构建生成的settings.js文件,分成多个settings.js文件,一个是大厅的settings.js,其他的settings.js文件为每个子游戏对应的settings.js文件,主要是分割字段rawAssets对应的assets的uuid,通过你切分的子包路径进行筛选是否归于子游戏的settings.js里
3:有了子游戏的raw-assets和源代码之后,还需要import目录,这时候我们通过读取我们工程子游戏里的全部meta文件,可以查看到对应的文件uuid,然后再读取对应的uuid文件里面的内容,需要用到的uuid,依此循环,把需要用到的全部uuid.json文件移动到子游戏的import目录,需要注意的是import文件上一层还需要建立一个res文件目录,res与raw-assets同级,这主要是因为游戏里根据相对路径查找uuid的,如 res/import 这样的方式查找,所以热更的时候下载的目录得适配此原则
4:main.js文件的编写,第一个是设置文件查找路径,包括添加热更的主目录与子游戏的目录,另一个是合并大厅的settings.js和每个子游戏的settings.js文件里面的内容,主要是相关uuid的合并,作为game.run启动所需要用到的参数,首场景设置成一个黑底场景,此场景主要是根据一个变量来判断是否转换到登录场景或者是子游戏的第一个场景里,这主要是因为我们每次热更都得重新加载一遍main.js文件,从而使游戏重启后能够切换到我们所需要的场景里
5:根据每个游戏的目录生成热更新manifest配置文件
参考资料:
1:大厅工程和子工程uuid合并 main.js编写 https://www.cnblogs.com/zhong-dev/p/10782834.html