基于Lua的Unity热更解决方案 – 1.前向知识

【热更新】
热更新是一种各大手游等众多App常用的更新方式。简单来说,就是在用户通过App Store下载App之后,打开App时遇到的即时更新。
(以上来自百度百科)
我觉得百度百科说的有点泛,光看这句话不太好理解,通过例子对比就比较轻松易懂。

·在没有热更新的情况下:
1.游戏出包,交给AppStore审核,审核通过;玩家在商店下载安装。
2.如果需要更新一个游戏功能:增加功能,出新的游戏包,交给AppStore审核,审核通过;玩家在商店更新(重新下载安装)。
3.如果需要更新界面:替换UI资源,新的游戏包,交给AppStore审核,审核通过;玩家在商店更新(重新下载安装)。
是不是感受到了无尽的黑暗……

·使用热更新之后:
1.游戏出包,交给AppStore审核,审核通过;玩家在商店下载安装。
2.更新了游戏功能:把新的功能相关资源文件传到服务器上;玩家打开游戏时,下载这些文件到本地,进入游戏开始玩耍。
3.更新了UI界面:把新的UI资源传到服务器上;玩家打开游戏时,更新UI资源,进入游戏开始玩耍。

·简单对比一下,就能发现:再也不用三天两头一碰上更新就去商店下载整包安装了,解决了麻烦的同时也省了很多流量。

【为什么要热更】
1.提升用户体验
游戏的更新是十分频繁的,动不动让玩家去商店下个整包,流量跟流失率分分钟就上去了。
所以通过热更将资源做增量更新是比较好的方式,更新包一般较小, 用户不连wifi也能随意下载。
2.快速
减少了苹果方面的审核次数。
比如圣诞节快到了,想更新一下UI界面,审核搞个一两周,圣诞老人都要回去了。
3.修复一些紧急bug
和2的原因是一样的,绕开审核,快速修复bug。
4.减少发布包的容量问题,一切可以做增量下载

【什么时候进行热更】
普遍做法是在游戏启动的时候进行热更。
不过热更在任何时候都可以进行,甚至玩家感受不到,就是所谓的边玩边下。

【如何实现热更】
1.使用Lua脚本编写游戏的UI或者其他的逻辑(主流)
2.使用C#Light
3.使用C#反射技术(IOS上的反射是部分支持,支持使用反射读取源代码,但不支持使用反射动态生成可执行代码)

【Unity如何实现热更】
Unity提供了一个资源更新技术,就是通过AssetBundle。
我们可以通过AssetBundle更新游戏UI,也可以把脚本或者其他代码当成资源打包成AssetBundle然后更新到客户端。
在所有的热更新技术中都需要AssetBundle。

其中C#脚本不能热更:因为它运行之前需要进行编译,而这个编译移动平台无法完成。
像Lua类的动态语言脚本可以热更:因为它可以跨平台解析,不需要编译。
在移动端可以编写Lua的解析器,通过这个解析器,可以运行最新的Lua脚本。
简而言之,就是把Lua脚本当做资源文件进行处理了。

【总结】
资源文件通过AB包进行更新;
像改动比较频繁的UI部分使用Lua脚本进行开发和更新;
像战斗部分也可以使用Lua开发和更新,如果担心性能,可以用C#,在使用C#后,
如果需要更新战斗逻辑,小版本可以用Lua进行更新,在大版本的时候换成C#(需要重新下载整包安装)。

【参考】
1.https://baike.baidu.com/item/热更新/20842716?fr=aladdin
2.http://baijiahao.baidu.com/s?id=1569344368514980&wfr=spider&for=pc
3.https://blog.csdn.net/twwk120120/article/details/54882322
4.https://www.cnblogs.com/muyuqianshan/p/6937096.html
5.https://blog.csdn.net/momo_da/article/details/54141136

One Comment

Add a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注