Xlua热更新使用方法 (二)


接上篇,研究Hotfix 热更新,
上篇主要是如果在开发中使用lua与C# 混合开发,此处则是在项目使用C#开发,遇到bug利用热更新修复(打补丁)
注意:热更新和增量更新不是同一回事,热更新只能解决一时的问题,当版本更新还是要进行C#的bug修复,此时玩家更新新的版本,当更新新的版本时,如果玩家不需要重新下载APP,就是增量更新方式,需要重新下载安装则非增量更新。

在现在手游动不动5,6G的时代,增量更新是有必要的。如果是端游,那则是必须的(动辄几十G,非增量更新,简直是玩家的噩梦),增量更新主要是利用bsdiff工具。

1.添加宏

在这里插入图片描述

2.对已经开发好的C# 项目添加【HotFix标签】

假设我们有一个MyHotFix脚本可能出现bug 或者后续需要修改逻辑(做活动),我们就打上Hotfix标签
在这里插入图片描述

3.在程序开始的时候执行main (所有的热更新lua都通过main.lua.txt进行管理)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需要修补哪个脚本,就在main里面添加 require 然后创建对应的lua文件

在这里插入图片描述

调用hotfix 修改对应脚本(在脚本里面写新的逻辑,具体参考官方写法就行)

4.测试热更新

在这里插入图片描述

参考步骤2,3

运行

在这里插入图片描述
可以看到我是bug执行了一次,我们把main的执行放到awak试试
在这里插入图片描述

这下bug的逻辑就被替代了,update执行的是lua里面的update
我们删除mian.lua.txt里面对 bug修复的逻辑
在这里插入图片描述

然后再执行脚本(注意,此处不需要重新编译,不用重新Generate Code)
在这里插入图片描述

可以看到 脚本执行的是之前的逻辑。我们可以通过main的加载,来确定是否修改某个脚本的逻辑,以及如何修改脚本的逻辑。

结合assetbundle和自定义loader 就可以实现热更新了

5.Xlua 用静态列表方式 代替【HotFix标签】

提问: 既然这样,是否可以将项目所有脚本都打上热更新标签,想改哪个改哪个
会出问题么?会出什么问题?

参考Xlua作者给出的答案:不建议采用打标签方式,建议采用列表方式(如果一百多个脚本,挨个打标签还是很麻烦的。万一有些用 有些不用,也不好管理,使用列表进行配置更加方便)

在这里插入图片描述
删除MyHotFix上的 hotfix标签
在这里插入图片描述
在Editor下添加一个脚本HotfixCfg,然后在里面添加静态列表,在列表中加入MyHotFix这个类
在这里插入图片描述
生成代码,注入,运行

在这里插入图片描述
可以看到与给MyHotFix打上[Hotfix]标签具有同样的效果,且更容易管理
下一篇结合AssetBundle做一个完整的热更新demo(版本检查+assetbundle资源下载+lua代码逻辑修改)

猜你喜欢

转载自blog.csdn.net/euphorias/article/details/112848909