xLua学习总结(三)---C#访问lua中数据

1.将lua中基本数据映射到C#类型

lua中数据

a=1
str="小明" --文件编码改为UTF-8
isRight=true

C# 

int a = env.Global.Get("a");
string str = env.Global.Get("str");
bool isRight = env.Global.Get("isRight");

2.将lua中的table映射到C#中的List

lua 

tableList={1,2,3,4,5,6}
tableList1={"str1","str2","str3"}

 C#

//注意lua中的数据类型
List intList = env.Global.Get>("tableList");

List strList = env.Global.Get>("tableList1");

3.将lua中的table映射到C#中的Dictionary 

dic={ key1=1, key2=2 }  --注意此处  key1 不能写成  "key1"
Dictionary dic = env.Global.Get>("dic");

4.将lua中的table映射到C#中的class或struct

lua

person={
  name="阿菜",
  age=6
}

 c#

class person
{
        public string name;
        public int age;
}
struct personStruct
{
        public string name;
        public int age;
}
person per = env.Global.Get("person");

personStruct per1 = env.Global.Get("person");

5.将lua中的table映射到C#中的Interface

[CSharpCallLua]//此处注意必须打上此标签!!
interface IPerson
{
        string name { get; set; }
        int age { get; set; }
}
IPerson per2 = env.Global.Get("person");

特别注意,映射到接口时,必须在此接口上打上[CSharpCallLua]标签!!!

而且需要生成代码,注册xLua菜单中的GenerateCode  Hotfix Inject in Editor.

如果打上标签后仍会报以下错误

可能是你的unity版本太新了。。。。,同样的在lua方法映射到C#委托的时候也可能会遇到。

6.将lua中的table映射到C#中的LuaTable

LuaTable table = env.Global.Get("person");
string name = table.Get("name");
int age = table.Get("age");

6.将lua中的全局function映射到C#中的delegate

lua:

function add(num1,num2)
  return num1+num2
end

C#中定义委托

[CSharpCallLua]
delegate int Add(int num1, int num2);
Add add = env.Global.Get("add");
Debug.Log(add(1, 2));

特别注意,映射到委托时,必须打上[CSharpCallLua]标签!!!

而且需要生成代码,注册xLua菜单中的GenerateCode  Hotfix Inject in Editor.

6.将lua中的全局function映射到C#中的luafunction

LuaFunction luaFunc = env.Global.Get("add");
object[] res = luaFunc.Call(1, 2);

建议:table映射为interface,function映射为delegate。

你可能感兴趣的:(xLua学习总结(三)---C#访问lua中数据)