xLua学习笔记_在C#脚本中使用xLua

  • 开始

引入命名空间:

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),同时也不会报错。

 

 

 

 

 

待补充...

xLua学习笔记_在C#脚本中使用xLua

上一篇:关于Windows程序设计的初步认识


下一篇:.Net Core3.1下使用Swagger搭建web api项目