Unity热更新——xlua

532 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第25天,点击查看活动详情

xLua是由腾讯维护的一个开源项目,xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。

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

1.可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现;

2.出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;

3.编辑器下无需生成代码,开发更轻量;

除此之外,xLua另一特色功能就是代码热补丁。非常适合前期没有规划使用Lua进行逻辑开发,后期又需要在iOS这种平台获得代码热更新能力的项目。

xLua所有的配置都支持三种方式:打标签;静态列表;动态列表。

打标签

xLua用白名单来指明生成哪些代码,而白名单通过attribute来配置,比如你想从lua调用c#的某个类,希望生成适配代码,你可以为这个类型打一个LuaCallCSharp标签:

该方式方便,但在il2cpp下会增加不少的代码量,不建议使用。

常用标签如下所示:

1、[XLua.LuaCallCSharp]:为一个C#类型加了这个配置,xLua会生成这个类型的适配代码(否则将会尝试用性能较低的反射方式来访问),提供给Lua调用。

2、[XLua.CSharpCallLua]:如果希望Lua文件中的逻辑能够被C#调用,可为Lua重的函数等打上该标签。

3、[XLua.Hotfix]:用于标记需要进行热更新的文件。

静态列表

有时我们无法直接给一个类型打标签,比如系统api,没源码的库,或者实例化的泛化类型,这时你可以在一个静态类里声明一个静态字段,该字段的类型除BlackList和AdditionalProperties之外只要实现了IEnumerable就可以了,然后为这字段加上标签:

这个字段需要放到一个 静态类 里头,建议放到 Editor目录 。

动态列表

声明一个静态属性,打上相应的标签即可。

这个属性需要放到一个 静态类 里头,建议放到 Editor目录。