如何评价腾讯在Unity下的xLua热更新方案?

我觉得xlua的概念很好。很多人用lua做热更新。如果没有热更新的需求,大部分人都不喜欢lua或者所谓的脚本开发。xlua很好的解决了这部分人的需求。

但是我有一点别的看法。2004年我从网易毕业的时候,网易的游戏都是基于脚本的,无论是客户端还是服务器。当时要么是lua,要么是python,还有一个类似C语法的脚本(名字忘了),是冯云牵头的。当时选择脚本作为逻辑开发语言* *的核心思想不是为了热更新* *,而是为了求解。

1)划分引擎层和业务层。svn很好的管理了权限,让新生无法访问核心引擎的代码权限。他们只能在脚本层做生意。当你对业务足够熟悉,对引擎足够了解,对公司足够忠诚的时候,就可以打开引擎层代码了。早年这样做是为了解决私服的问题。很多同学拿着所有的源码去搭建私服,很可怕,于是就当了业务程序员。

2)避免整个进程被写的很差的C和cpp代码崩溃。脚本代码错误,最多影响局部逻辑。还可以举报脚本错误,方便后续解决问题。现在在统一中也是如此。如果c#代码写得很差,它会简单地闪回。最好使用lua作为安全调用层。

3)快速修改代码,快速运行。早些年cpp代码编译速度慢,调试运行一行代码要半天。脚本代码易于修改和运行,今天也是如此,无需等待。同时iOS也有文本大小的大小限制,过多的存根函数会放大文本大小,lua脚本中再多的代码也不会有这个问题。不需要为文本大小选择代码怎么写,函数会保留。

4)反外挂,对,你说的没错,反外挂。早些年PE有各种脱壳反编译的工具,使得一个exe几乎是秘密的,很容易被外挂作者外挂。使用脚本后,几乎所有的逻辑都是中间代码。这部分中间代码可以通过修改操作码、加密、边运行边解密的方式保证在进程空间内基本完成,这对插件作者来说是一个极大的挑战。

5)最后就是所谓的“热更新”,当时还不是热更新,就是每次客户端启动,一个启动器去服务器下载一个更新,然后应用。