xLua为Unity3D增加Lua脚本编程的能力,进而提供代码逻辑增量更新的可能。当然不仅仅如此,在coco2dx上的实践告诉我们,以Lua为主打语言的游戏客户端编程是可行的。
xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:
更详细的特性、平台支持介绍请看这里。
直接解压到Assets下可用。第一次使用建议把例子包也安装,运行看看效果。
如果希望安装到其它目录,请看FAQ相关介绍。
xLua有两个版本,分别集成了lua5.3和luajit,一个项目只能选择其一。这两个版本C#代码是一样的,不同的是Plugins部分。
lua5.3的特性更丰富些,比如支持原生64位整数,支持苹果bitcode,支持utf8等。出现问题因为是纯c代码,也好定位。比起luajit,lua对安装包的影响也更小。
而luajit胜在性能,如果其jit不出问题的话,可以比lua高一个数量级。目前luajit作者不打算维护luajit,已经在找人接替其维护,所以其前途堪然。
项目可以根据自己情况判断哪个更适合。因为目前lua53版本使用较多,所以xLua工程Plugins目录下默认配套是lua53版本。
一个完整的例子仅需3行代码:
下载xLua后解压到Unity工程Assets目录下,建一个MonoBehaviour拖到场景,在Start加入如下代码:
Lua.LuaEnv luaenv = new XLua.LuaEnv(); luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')"); luaenv.Dispose();
1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine.Debug.Log打印了个日志。
2、一个LuaEnv实例对应Lua虚拟机,出于开销的考虑,建议全局唯一。
C#主动调用lua也很简单,比如要调用lua的系统函数,推荐方式是:
[XLua.CSharpCallLua] public delegate double LuaMax(double a, double b);
var max = luaenv.Global.GetInPath<LuaMax>("math.max");
Debug.Log("max:" + max(32, 12));
建议绑定一次,重复使用。生成了代码的话,调用max是不产生gc alloc的。
xLua支持热补丁,这意味着你可以:
如果你仅仅希望用热更新来fix bug,这是强烈建议的做法。这里是使用指南。