找回密码
 立即注册
查看: 290|回复: 0

Xlua

[复制链接]
发表于 2021-8-11 09:44 | 显示全部楼层 |阅读模式
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的多返回值。例如
  1. namespace XLuaTest
  2. {public struct Param1
  3.     {public int x;public string y;}publicclassDerivedClass{public double ComplexFunc(Param1 p1, ref int p2, out string p3, Action luafunc, out Action csfunc){
  4.             Debug.Log("P1 = {x="+ p1.x +",y="+ p1.y +"},p2 = "+ p2);luafunc();
  5.             p2 = p2 * p1.x;
  6.             p3 ="hello "+ p1.y;csfunc=()=>{
  7.                 Debug.Log("csharp callback invoked!");};return1.23;}}}//在lua中可以这样调用
  8.     local derivedClass=CS.XLuaTest.DerivedClass();
  9.     local a,b,c,d = derivedClass:ComplexFunc({x=10,y="你好"},10,function()--a = ComplexFunc里return的值,bcd分别等于p2,p3,csfunc的值
  10.              print("CallFromLua");
  11.     end)
复制代码
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 04:37 , Processed in 0.114177 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表