热更新之xLua

思考并回答以下问题:

  • Lua有哪两种作用?
  • 如何安装xLua?

Unity热更新有两大流派,C#派和Lua派。

Lua语言

Lua设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译运行。Lua并没有提供强大的库,因为它的定位就是作为嵌入的脚本语言,所以Lua不适合开发独立应用程序。Lua有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用,特别是在端游阶段,游戏几乎都是使用C/C++开发的,Lua给游戏开发带来了极大的便利性。

不仅仅作为扩展脚本,Lua也可以作为普通的配置文件,代替XML、JSON、ini等文件格式,并且很容易理解和维护。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译运行。一个完整的Lua解释器不过200K,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。

Lua之所以在游戏开发中这么受欢迎,也是因为它的优点:

  • (1)语言优美、轻巧
  • (2)性能优良、速度快
  • (3)可扩展性强。

Unity与Lua

Unity中的Lua也一直在发展,目前Unity中比较流行的几个Lua框架有:

  • xLua
  • toLua
  • uLua
  • sLua

xLua

xLua为Unity、.Net、Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。

xLua的突破

xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:

  • 可以运行时把C#实现(方法,操作符,属性,事件等等)替换成Lua实现,也就是热补丁功能;
  • 出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;
  • 编辑器下无需生成代码,开发更轻量;

下载

上图中可以看到xLua有几个不同的版本,有什么区别呢?

xLua有两个版本,分别集成了Lua5.3和Luajit,一个项目只能选择其一。这两个版本C#代码是一样的,不同的是Plugins部分。

  • xLua:此版本集成的是Lua5.3,Lua5.3的特性更丰富些,比如支持原生64位整数,支持苹果bitcode,支持utf8等。出现问题因为是纯C代码,也好定位。比起Luajit,Lua对安装包的影响也更小。

  • xLua_Luajit:此版本集成的是Luajit,Luajit胜在性能,如果其jit不出问题的话,可以比Lua高一个数量级。目前Luajit作者不打算维护Luajit,在找人接替其维护,后续发展不太明朗。

  • xLua_general:用于通用的.Net或Mono环境,可以在非Unity环境中使用。

目前Lua53版本使用较多,所以xLua工程Plugins目录下默认配套是Lua53版本,后面学习中也会使用这个版本。

安装

安装非常简单,新建一个Unity工程。

打开zip包,你会看到一个Assets目录,这目录就对应Unity工程的Assets目录,保持这目录结构放到你的Unity工程。

拖到空白处覆盖现在的Assets目录
0%