文章

Unity 热更新

技术研究

XLua

腾讯2017年开源的手游热更新方案

  • 开发只用C#
  • 运行也是C#,性能可以秒杀lua
  • 出问题了才用Lua来改掉C#出问题的部位,替换甚至做到不用重启游戏
  • 补丁需要预打入
  • 开头加入几个il指令对性能的开销

xLua会在C#编译成il后插入一个处理,该处理会从il层面为每个打了Hotfix标签的类型的函数开头加入几个il指令,如果用C#描述是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int Add(int a, int b)
{
    return a + b;
}

// 加了il指令:
static Func<object,int,="" int=""> hotfix_Add = null;

public int Add(int a, int b)
{
    if (hotfix_Add !=null) return hotfix_Add(this, a, b);
    return a + b;
}

如果lua中执行了hotfix调用,hotfix_Add会指向一个lua的适配函数。

toLua

开发平台成熟稳定,Bug修复迅速

  • 开发者众多,资源丰富
  • 静态方法,性能优
  • 有成功商业产品案例(啪啪三国、超神战队、酷鱼吧捕鱼、绝地战警、这不是刀塔等)
  • 都是基于原生版本的改进;未来,两者会合并成一个插件

Unity静态绑定lua的一个解决方案,它通过C#提供的反射信息分析代码并生成包装的类。它是一个用来简化在C#中集成lua的插件,可以自动生成用于在lua中访问Unity的绑定代码,并把C#中的常量、变量、函数、属性、类以及枚举暴露给lua。它是从cstolua衍变而来。从它的名字可以看出,它是集成了原来的tolua代码通过二次封装写了一个C#与tolua(c)的一个中间层。

本文由作者按照 CC BY 4.0 进行授权