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。