1. 执行一个lua 代码.
LuaEnv lua = new LuaEnv();
lua.dostring("print('hello world')");
2. 也可以使用
LuaEnv lua = new LuaEnv();
lua.dostring(require'another'); another.lua.txt 是一个放在resources下的文件, 记录lua代码
3. 获取lua代码中的全局变量
lua.Global.Get<int> ("a"); 或者是lua.Global.Get ("b", out b);. 这个变量可以直接在another下, 也可以是在another 引用的另一个lua.txt文件下的全局变量, 都是可以, 不会报错的
4. 可以把lua 中的table 映射成 c# 中的对象或者是结构体 , 但是测试中表明, xlua 会把lua中的table 对象映射成C# 的对象, 但是只能调用空参构造. 如果c#的类没有空参构造, 那么返回的对象就是空
5, xlua 中把lua 中的对象映射成 C# 的接口的时候, 需要在这个接口定义上加上这个标记[CSharpCallLua], 同时也必须要有一个方法 来负责获取这个接口对象, 这个也是必须加上[CSharpCallLua], lua 中的table 无法直接通过lua.global.get 来直接获取并复制给C# 接口. 还有一点就是释放luaenv 的时候, 必须把所有的C# 通过lua 获得的方法, 也置为null 才可以
6, 还可以 把lua 中的table 直接映射成 C# 中的dictionary 或者是list , 但是这个就是table 里面的key value 有要求了.
7. lua 中的多返回值的方法, 也是可以映射到C# 中的delegate方法的, 第一个返回值是C# 的返回值, 后面的, 就是delegate方法的out , ref 参数, 也是从左到右依次
8. lua 中创建Unity 的GameObject, 这样, local obj = CS.UnityEngine.GameObject("name") 就好了,
9, 在lua 中可以定义一些全局变量 记录C# 的东西, 然后在C# 中一开始的时候就把 这个值设置好, luaenv.global.set("self",this) 这样的话 lua中的代码就可以包含self, 可以通过self:method() 来调用C# 中self 这个对象的方法, 记住是: 分号, 如果用.show(self) 的话就必须把自身传进去, 因为C# 中非静态方法的第一个参数就是自己 获取或者修改C# 对象的属性则仍然是用. . 点..
10. 如果lua 要调用C# 的静态方法的话, 例如Hello.cs 这个类, 那么直接CS.Hello.Show() 就可以了.
11. 重载也是没有问题的
12. C# 类中的枚举, 也可以在lua 中赋值, 还可以用数字给枚举赋值, 通过这样, CS.Hello.Week.__CastFrom(1) 这样就把1 转成枚举了.
13, 可以给C# 类中的事件, 在lua中增加回调函数, 如下 self:showmtd("+",show), 其中showmtd 是定义在 C# 类中的public event Show showmtd;