XLua

要使用xlua引用命名空间

Using XLua;

 

LuaEnv : 可以理解为lua的虚拟机

LuaEnv的创建:

LuaEnv luaenv = new LuaEnv();

LuaEnv的销毁

luaenv.Dispose();

 

执行lua文件

1.执行lua的语句

luaenv.DoString (“print(‘hello world’)”);

注意字符串必须符合lua的语法

2.执行lua的文件

luaenv.DoString ("require 'HelloWorld'");

注意:使用默认加载器去加载lua文件需要把lua文件放在Resources文件夹下,并且命名有固定的规范,首先你的文件后缀.txt,其次文件名的后面必须含有.lua,最终的文件名字file.lua.txt的格式

 

注意:使用require这种方式加载文件,如果出现错误

1).检查文件的命名后缀是否符合要求

2).检查文件是否在Resources下

3).检查DoString()执行的字符串的语法有没有问题

4).检查文件里的lua语法有没有问题

 

 

3.自定义的loader(加载器)

luaenv.AddLoader (MyCustomLoader);

byte[] MyCustomLoader(ref string filepath)

filepath是require的名字,不包括后缀

byte[] 是lua的语句转换成的byte数组

 

每一个loader都是为require服务的,所有添加加载器需要在require执行之前

 

加载机制:执行require时,判断如有有自定义的加载器,那么就去回调自定义的记载器,如果第一个自定义加载器没找到(return null),再去第二个自定义的加载器找,。。。直到所有的自定义加载器都没找到,那执行默认的加载器,如果默认的加载器也没找到,报错了

 

 

C#调用lua

1.获取一个全局的基本数据类型

Luaenv.Global:是一个table,执行lua文件之后,所有的全局的变量方法全都存储在Global中,可以通过Get去获取相应的全局变量和方法

T luaenv.Global.Get<T>(“”)

T是你要访问的lua的变量的类型,参数是你要访问的变量的名,在lua里的名字

 

2.table映射到struct或class

Xlua实例一个类的对象,把对应的键的值赋值给了类的字段

只会把table的键映射到class的public变量名与键名一致的变量里,table的字段的多少与类的字段的多少不需要保持一致

 

3.table映射到interface

IXiaoMing ixm = luaenv.Global.Get<IXiaoMing> ("tab");

注意:所有的table中的字段都映射到interface的属性里,方法映射到interface的方法,注意如果要使用这种方式,interface需使用[CSharpCallLua]这个特性,希望把一个table适配到interface

 

4.映射到Dictionary和List

Dictionary:只能映射table的键和值与dic的键的类型和值类型对应上的

List:只能映射table里没有键的,值与list对应的值

 

5.映射function到delegate

[CSharpCallLua]

public delegate void NotParamNotReturn();

NotParamNotReturn func = luaenv.Global.Get<NotParamNotReturn>("get");

委托的定义是根据function的返回值和参数去决定的

如果function是多返回值的:返回值从左到右输出参数对应委托的返回值,后面一次对应委托的ref或out参数,如果委托没有返回值,function返回值从左到右依次对应out或ref参数,lua的返回值可以多于c#的out或ref,也可以少于c#的ref或out

ref修饰的参数可以作为参数传递到lua的function中,out修饰的参数不可以作为参数传递到lua的function中

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值