- 开始
引入命名空间:
using XLua;
创建Lua的运行环境:
LuaEnv luaenv = new LuaEnv();
这里有一段官方提示:
一个LuaEnv实例对应Lua虚拟机,出于开销的考虑,建议全局唯一。
释放Lua:
luaenv.Dispose();
- 加载Lua文件
注意,当你使用以下方法读取lua文件的时候
luaenv.DoString("require ‘文件名‘");
这个文件名可以不用添加.lua或者.txt的后缀名,但是!这个文件的后缀名真正其实是.txt! 用.lua作为后缀名,Unity不会识别。
哪能不能不用txt作为后缀呢?
这里贴上一段xLua之FAQ中的一部分:
lua源码只能以txt后缀?
什么后缀都可以。
如果你想以TextAsset打包到安装包(比如放到Resources目录),Unity不认lua后缀,这是Unity的规则。
如果你不打包到安装包,就没有后缀的限制:比如自行下载到某个目录(这也是热更的正确姿势),然后通过CustomLoader或者设置package.path去读这个目录。
那为啥xLua本身带的lua源码(包括示例)为什么都是txt结尾呢?因为xLua本身就一个库,不含下载功能,也不方便运行时去某个地方下载代码,通过TextAsset是较简单的方式。
- 在C#脚本中,获取Lua中的变量
首先,官方给的例子是这个样子的:
luaenv.Global.Get<int>("a") luaenv.Global.Get<string>("b") luaenv.Global.Get<bool>("c")
以上代码分别获取了Lua脚本中:
number类型的a string类型的b bool类型的c
这里需要注意的一点是:在获取number类型时,一定要注意接收的类型
当Lua中的number类型是小数时,使用Get<int>来获取会获取不到该值;返回值为0。
但是使用Get<double>(或者float)来获取number类型时,无论是整数还是小数,都可以获取到。
- 在C#脚本中,获取Lua中的表
第一种方法,不推荐,官方描述:
要注意的是,这个过程是值拷贝,如果class比较复杂代价会比较大。而且修改class的字段值不会同步到table,反过来也不会。
方法如下:
1 -- 这是lua中的表 2 table = { 3 name = "xm",age = 12 4 }
需要在C#中定义一个与lua表中的元素名称,类型一样,而且必须是public的 (数量可以不一致)的class或者struct;
//这是在C#中定义的类 class MyClass { public string name; public int age; }
准备完毕后调用:
1 MyClass mc = e.Global.Get<MyClass>("table"); 2 print(mc.name); 3 print(mc.age); 4 //输出: 5 //xm 6 //12
使用这种方法时,只能获取到你在C#类中定义的同名变量,若是你在表中定义了第三个变量,不去获取;又或是你在C#类中使用了不一样的名称变量,去获取,都不会得到这个值(不一样名称会为null),同时也不会报错。
待补充...