|
Xlua学习-LuaCallCsharp
new C#对象访问C#静态属性,方法访问C#成员属性,方法父类属性,方法参数的输入输出属性(out,ref)
new C#对象
在lua中是没有new关键字的,所以在lua中这样创建
local newGameObj = CS.UnityEngine.GameObject;
local obj = newGameObj();–上面是获取到类,这一步相当于new 一个对象
print(obj);–我们就能用这个对象来调用GameObject中的方法了
这里不管构造函数是有参还是无参的都和C#里基本一致,只是没有new关键字。
访问C#静态属性,方法
在lua中访问C#的静态属性和方法和C#里是一致的,直接CS.命名空间.类名.属性/方法名,例如:
CS.UnityEngine.Time.deltaTime
CS.UnityEngine.GameObject.Find(‘helloworld’)
访问C#成员属性,方法
这里和C#的也基本一致,对象.方法()/属性,只是在调用方法上我们可以用到lua的冒号语法糖,例如:对象:方法();推荐使用这种方法,当然你也可以这样调用,对象.方法(对象);//具体两者的差异和性能上的优劣,可以具体理解下lua
父类属性,方法
xlua支持(通过派生类)访问基类的静态属性,静态方法,(通过派生类实例)访问基类的成员属性,成员方法
参数的输入输出属性(out,ref)
Lua调用测的参数处理规则:C#的普通参数算一个输入形参,ref修饰的算一个输入形参,out不算,然后从左往右对应lua 调用测的实参列表;
Lua调用测的返回值处理规则:C#函数的返回值(如果有的话)算一个返回值,out算一个返回值,ref算一个返回值,然后从左往右对应lua的多返回值。例如- namespace XLuaTest
- {public struct Param1
- {public int x;public string y;}publicclassDerivedClass{public double ComplexFunc(Param1 p1, ref int p2, out string p3, Action luafunc, out Action csfunc){
- Debug.Log("P1 = {x="+ p1.x +",y="+ p1.y +"},p2 = "+ p2);luafunc();
- p2 = p2 * p1.x;
- p3 ="hello "+ p1.y;csfunc=()=>{
- Debug.Log("csharp callback invoked!");};return1.23;}}}//在lua中可以这样调用
- local derivedClass=CS.XLuaTest.DerivedClass();
- local a,b,c,d = derivedClass:ComplexFunc({x=10,y="你好"},10,function()--a = ComplexFunc里return的值,bcd分别等于p2,p3,csfunc的值
- print("CallFromLua");
- end)
复制代码 |
|