(XLua)C#与Lua中的交互

(XLua)C#与Lua中的交互

96 _凉笙 关注

2017.10.10 14:25* 字数 999 阅读 570评论 0喜欢 0

XLua下载地址:https://github.com/Tencent/xLua

(XLua)C#与Lua中的交互_第1张图片

Paste_Image.png

 

下载后接下来就是导入XLua到unity里了,解析出来的XLua有下面几个文件夹

 

(XLua)C#与Lua中的交互_第2张图片

Paste_Image.png

 

我们只需要将Assests:主目录里面的东西全部导入到Unity里面就OK了,导入后再XLua的文件夹下有这么几个。里面都有学习的文档,也可自行去学。

 

(XLua)C#与Lua中的交互_第3张图片

Paste_Image.png

C#访问Lua中的全局变量与table

首先创建一个在Resources下面创建一个文本文件并给其命名为Hello world.lua.txt,这样我们就可以读取到Lua文本文件了,然后写入以下

 

接着我们创建一个脚本HolloworldXLua引入程序集XLua在Start方法下写入

一个LuaEnv实例对应Lua虚拟机,出于开销的考虑,建议全局唯一
DoString参数为String,可输入任意合法的Lua代码.

 

在这里访问Lua中的Table有几种方法一种是映射到类中,另一种是映射到接口中去,但是这两种方法结果都是相同但是,有一点是不一样的,那就是映射到类中只拷贝Lua里面的数据但是用接口映射的话可以修改Lua里面的数据.,用接口相当与引用
然后我们就可以看到输出的结果,输出的就是Lua脚本里面的全局变量与里面的table里面的

 

(XLua)C#与Lua中的交互_第4张图片

Paste_Image.png

然后还可以通过Dictionary或者List去映射Lua表里面的数据

 

输出结果:

 

(XLua)C#与Lua中的交互_第5张图片

Paste_Image.png

 

下面使用List也可以映射那些没有Key的值,
Lua脚本里面

 

C#脚本里面

 

最后输出可以看到2输出两次212和15分别输出一次对应Lua脚本里面的数据:

 

(XLua)C#与Lua中的交互_第6张图片

Paste_Image.png

 

还有一种访问Tab的方式就是使用LuaTable,这种方式不推荐使用,性能比较慢,我推荐使用第二种方式通过去创建Intaface去映射Lua中的Table。

访问一个全局的Function

首先Lua脚本里面写入函数方法,一个有多个返回值有参数的方法

 

那么在C#中如何去调用呢下面来看看,因为我们在C#中只能有一个返回值而在Lua中可以有多个返回值,那么在C#返回值的时候只能返回第一个值,而Lua后面的返回值可以在C#中用out或者ref去接收后面的返回值

 

输出结果,前面两个是Lua里面输出的,后面是C#里面输出的,这样就轻松调用了Lua里面的方法了

 

(XLua)C#与Lua中的交互_第7张图片

Paste_Image.png

还有一种方式就是使用Lua自带的LuaFction,和上面LuaTable使用一样比较耗费性能,但是使用简单所以这里也不推荐使用

添加自定义Load的方法

如果我们的Lua文本不想放在Resource里面加载想放到其他地方加载怎么办呢,Xlua也提供了自定义的Load方法,比如我们想把我们的Lua脚本放在StreamingAssets文件夹下面,那么该如何做呢,首先先在Unity里面创建一个StreamingAssets文件夹,然后把我们的Lua脚本放在StreamingAssets文件夹下,创建一个脚本CreateLoade,写入代码

 

然后我们在Unity里面运行起来看结果,输出了Lua脚本里输出的结果。这样就没问题了.

 

Paste_Image.png

在Lua中构造Unity里面游戏物体并且查找游戏对象获取相应组件

在Lua脚本中写入

 

这时候C#中构造虚拟机运行的时候就会在Unity里面构造一个空的游戏物体,运行后会生成一个名为NewByLua的空游戏物体,并且会查找到Directional Light并修改名为为UpdataLight,并移除了里面的Light组件

 

(XLua)C#与Lua中的交互_第8张图片

Paste_Image.png

你可能感兴趣的:(lua)