using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
/*
* Author:W
* C#访问Lua中全局函数
*/
public class CSharpCallLua : MonoBehaviour {
private LuaEnv luaEnv;
// Use this for initialization
void Start () {
luaEnv = new LuaEnv();
luaEnv.DoString("require 'CSharpCallLua'");
//方式1:C#中定义委托来和Lua中全局函数建立映射
Add add = luaEnv.Global.Get<Add>("add");
add(2, 3);
Add2 add2 = luaEnv.Global.Get<Add2>("add2");
int res = add2(4, 5);
Debug.Log("add2 res = "+res);
Add3 add3 = luaEnv.Global.Get<Add3>("add3");
int res2;
int res3;
int res4 = add3(6,8,out res2,out res3);
Debug.Log("add3 res4="+res4+" res2="+res2+" res3="+res3);
Debug.Log("==========================================");
//方式2:使用xlua自带的LuaFunction函数建立映射,无需创建委托
//缺点:慢,不推荐使用
LuaFunction luaFunction = luaEnv.Global.Get<LuaFunction>("add3");
object[] oArr = luaFunction.Call(2, 6);
foreach (object o in oArr)
{
Debug.Log(o);
}
}
//针对无返回的
[CSharpCallLua]
delegate void Add(int a, int b);
//针对Lua中返回一个结果的
[CSharpCallLua]
delegate int Add2(int a, int b);
//针对Lua返回多个结果的 注意:out与ref都可以
[CSharpCallLua]
delegate int Add3(int a, int b, out int res2, out int res3);
private void OnDestroy()
{
if (luaEnv != null)
luaEnv.Dispose();
}
}
lua脚本
function add(a,b)
print("Add")
end
function add2(a,b)
return a+b
end
function add3(a,b)
return a+b,a,b
end
运行结果截图如下: