调用成员方法 注意:调用成员方法,第一个参数需要传该对象,建议用冒号语法

loacl camera = CS.UnityEngine.GameObject.Find("Main Camera")

--冒号语法

camera:GetComponent("Camera")

--点语法

camera.GetComponent(camera,"Camrea")

xlua支持子类访问父类的静态属性、静态方法xlua支持子类实例访问父类的成员属性、成员方法lua支持多个返回值,C#只有一个返回值,但是C#支持传递多个out、ref参数,在C#中可以使用ref和out来接受lua的多返回值

--[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("luaAction");

int resa = 100;

int resb;

int value= testAction (45,67,ref resa, out resb);

print(value);

print(resa);

print(resb);

testAction = null;

xlua支持方法重载,直接通过不同的参数类型访问

test:TestAction()

test:TestAciton(1)

test:TestAction("a")

xlua调用C#方法时,如果C#方法的形参中带有默认值,不传值时,会按默认值传递扩展方法,C#中定义了扩展方法,lua中可以直接使用lua不支持泛型方法,建议在C#中封装后使用xlua调用C#的枚举,需要在C#定义枚举时,加上[CSharpCallLua]特性

//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("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)

xlua获取C#类型

typeof(CS.UnityEngine.GameObject)

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: