文章目录
前言
Lua由于其简单易用,方便热更等性质,一直是游戏行业的首推脚本语言。Unity引擎也诞生了很多款为其适配的Lua虚拟机运行环境,主要有XLua,SLua,ToLua和ULua,本文不会着力比较这几种框架的实现差异,只讨论其中背靠大厂腾讯的XLua框架。
应用场景
- UI逻辑代码
- Hotfix
- 网络层
- 除计算以外的常规逻辑(此处的计算指涉及矩阵等运算的场合)
XLua 常用 API
此处只会介绍常用的,合乎规范的内容,拓展阅读请访问XLua github。
- Lua虚拟机
XLua中对Lua虚拟机进行了封装,建立和移除一个全局环境很简单:
_luaEnv = new XLua.LuaEnv();
_luaEnv.Dispose();
在大致查看XLua C#部分封装中,可以看到,它将Lua的c通过dll形式引入 LuaAPI,然后对线程安全,异常等做了特殊处理。
- require
XLua为了方便使用require,添加了 AddLoader 方法:
_luaEnv.AddLoader(LoadLua);
static byte[] LoadLua(ref string luaname)
{
string realPath = @"LuaScripts/" + luaname + ".lua";
TextAsset luaContent = Resources.Load(realPath) as TextAsset;
return luaContent.bytes;
}
此处LoadLua是一个委托,使用Lambda函数亦可。
XLua支持多个Loader,会去遍历调用,直到读出数据为止。如果不添加任何Loader,它支持默认从Resources根目录读取后缀为“.txt”的lua文件。
- dostring
使用 DoString 来实现Lua载入字符的功能,这块也是热更的重要功能。
_luaEnv.DoString("require('main')");
- c# call lua
使用LuaTable来映射Lua表:
LuaTable luaMonoMap = _luaEnv.Global.Get<LuaTable>("luaMonoMap")