当前位置: 首页 > news >正文

xLua Lua访问C#注意事项(七)

  • 调用成员方法
    注意:调用成员方法,第一个参数需要传该对象,建议用冒号语法
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<CSAction>("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<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("事件")
endlocal GameObject = CS.UnityEngine.GameObject
local obj = GameObject.Find("GameObject")
local manager = obj:GetComponent("Manager")   
manager:testEvent('+',luaAction)
  • xlua获取C#类型
typeof(CS.UnityEngine.GameObject)
http://www.lryc.cn/news/224777.html

相关文章:

  • vue3+antv2.x的画布
  • Docker部署ubuntu1804镜像详细步骤
  • mac 卸载第三方输入法
  • 可观察性在软件测试中的重要性
  • Delphi TCP服务端监听端口获取客户端RFID网络读卡器上传的刷卡数据
  • javaSE学习笔记(一)概述、语法
  • 接口开发之使用C#插件Quartz.Net定时执行CMD任务工具
  • XSS脚本(存储型xss获取肉鸡的cookies)
  • 【React】04.MVC模式和MVVM模式
  • 调试代码0
  • 【C++心愿便利店】No.12---C++之探索string底层实现
  • Android Studio(列表视图ListView)
  • 让深度神经网络绘画以了解它们是如何工作的
  • https://www.jianshu.com/p/34bf240b85a9
  • 如何导出PPT画的图为高清图片?插入到world后不压缩图像的设置方法?
  • 【Spring】Spring IOC DI
  • 一招解密网络流量瓶颈!
  • 某校帮签到小程序m 加密参数解析
  • Node.js |(六)express框架 | 尚硅谷2023版Node.js零基础视频教程
  • 包教包会:Mysql主从复制搭建
  • Subset Selection
  • 【测开求职】面试题:计算机网络 精简版整理
  • 设计模式-代理模式(delegate)
  • MongoDB 安装与配置
  • rabbitMq创建交换机,以及路由键绑定队列教程
  • odoo16前端框架源码阅读——ormService.js
  • 详谈滑动窗口算法与KMP算法区别以及二者在什么场景下使用
  • k8s、数据存储
  • Vue生命周期全解析:从工厂岗位到任务执行,一览无遗!
  • 常见产品结构四大类型 优劣势比较