1、在lua文件中创建一个无参无返回的函数
testFun = function()
print("无参无返回")
end
2、第一种获取方法:通过GetFunction方法获取
LuaFunction function = LuaMgr.GetInstance().LuaState.GetFunction("testFun");
//调用
function.Call();
3、第二种方法:通过[函数名]的方式获取
function = LuaMgr.GetInstance().LuaState["testFun"] as LuaFunction;
function.Call();
4、第三种方法:首先得到一个luafunctino,然后再转成委托的形式
function = LuaMgr.GetInstance().LuaState.GetFunction("testFun");
UnityAction action = function.ToDelegate<UnityAction>();
action();
1、在lua脚本中创建一个有参又返回的函数
testFun2 = function(a)
print("有参又返回")
return a+100
end
2、第一种方法:通过luafunction的call来访问
function = LuaMgr.GetInstance().LuaState.GetFunction("testFun2");
//开始使用
function.BeginPCall();
//传参
function.Push(99);
//传参结束 调用
function.PCall();
//执行得到返回值
int result = (int)function.CheckNumber();
//执行结束
function.EndPCall();
3、第二种方法:通过luaFunction的Invoke方法来调用
function = LuaMgr.GetInstance().LuaState.GetFunction("testFun2");
int result = function.Invoke<int,int>(199);
4、第三种方法:转成委托
function = LuaMgr.GetInstance().LuaState.GetFunction("testFun2");
Func<int,int> func = function.ToDelegate<Func<int,int>>();
int result = func(900);
5、第四种方法:通过解析器直接调用
int result = LuaMgr.GetInstance().LuaState.Invoke<int,int>("testFun2",800,true);
1、在lua脚本中创建多返回值函数
testFun3 = function(a)
print("多返回值")
return 1,2,false,"123",a
end
2、第一种方法:通过Call的形式
function = LuaMgr.GetInstance().LuaState.GetFunction("testFun3");
//开始调用
function.BeginPCall();
//传参
function.Push(1000);
//传参结束,调用
function.PCall();
//得到返回值
int a1 = (int)function.CheckNumber();
int b1 = (int)function.CheckNumber();
bool c1 = function.CheckBoolean();
string d1 = function.CheckString();
int e1 =(int)function.CheckNumber();
//执行结束
function.EndPCall();
3、第二种方法:通过Out来接
首先定义一个委托
public delegate int customCallOut(int a,out int b, out bool c,out string d,out int e);
然后通过委托中的out接收返回值
customCallOut callOut = function.ToDelegate<customCallOut>();
int b2;
bool c2;
string d2;
int e2;
result = callOut(999,out b2,out c2,out d2,out e2);
注意:如果是自定义委托用来装lua,必须在关键文件CustomSettings.cs中去加上自定义委托
_DT(typeof(customCallOut)),
加上之后点击lua->Generate all生成文件
4、第三种方法:通过Ref来接
首先定义一个委托
public delegate int customCallRef(int a,ref int b, ref bool c,ref string d,ref int e);
然后通过委托中的out接收返回值
customCallRef callRef = function.ToDelegate<customCallRef>();
int b3 = 0;
bool c3 = true;
string d3 = "";
int e3 = 0;
result = callRef(999,ref b3,ref c3,ref d3,ref e3);
注意:如果是自定义委托用来装lua,必须在关键文件CustomSettings.cs中去加上自定义委托
_DT(typeof(customCallRef)),
加上之后点击lua->Generate all生成文件
1、首先在lua脚本中定义一个变长参数函数
testFun4 = function(a,...)
print("变长参数")
print(a)
arg = {...}
for k, v in pairs(arg) do
print(k,v)
end
end
2、第一种方法:通过自定义委托接收
首先定义一个委托
public delegate void CustomCallParams(int a,params object[] objs);
然后通过委托中的out接收返回值
function = LuaMgr.GetInstance().LuaState.GetFunction("testFun4");
//通过委托装载
CustomCallParams call = function.ToDelegate<CustomCallParams>();
call(100,1,true,"123",0,false);
注意:如果是自定义委托用来装lua,必须在关键文件CustomSettings.cs中去加上自定义委托
_DT(typeof(CustomCallParams)),
加上之后点击lua->Generate all生成文件
3、通过luaFunction里面直接call
function = LuaMgr.GetInstance().LuaState.GetFunction("testFun4");
function.Call<int,int,bool,string,int,bool>(100,10,true,"123",0,false);