--[Lua--]
function luaAction(a,b,c)
return a,a+b,c
end
--[C#]
[CSharpCallLua]
delegate int CSAction(int a, int b, ref int resa, out int resb);
var testAction = luaEnv.Global.Get<CSAction>("luaAction");
int resa = 100;
int resb;
int value= testAction (45,67,ref resa, out resb);
print(value);
print(resa);
print(resb);
testAction = null;
//C#
[CSharpCallLua]
public enum TestEnum
{
One,
Two,
Three
}
--lua
CS.TestEnum.One
xlua调用C#委托与调用C#的方法没有区别
//C#
[CSharpCallLua]
public delegate void TestDelegate();
public TestDelegate testDelegate;
luaEnv = new LuaEnv();
luaEnv.DoString("require 'TestLua'");//使用内置loder加载lua源文件
testDelegate = luaEnv.Global.Get<TestDelegate>("luaAction");
testDelegate?.Invoke();
--lua
function luaAction()
print("委托")
end
xlua调用C#event并添加事件
//C#
[CSharpCallLua]
public delegate void TestEvent();
public event TestEvent testEvent;
luaEnv = new LuaEnv();
luaEnv.DoString("require 'TestLua'");//使用内置loder加载lua源文件
testEvent?.Invoke();
luaEnv.Dispose();
--lua
function luaAction()
print("事件")
end
local GameObject = CS.UnityEngine.GameObject
local obj = GameObject.Find("GameObject")
local manager = obj:GetComponent("Manager")
manager:testEvent('+',luaAction)