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

中国建设部网站查询网微网站做的比较好的

中国建设部网站查询网,微网站做的比较好的,网页设计与制作代码软件,大连网站制作仟亿科技toluaframework中C#怎么调用Lua的方法 问题Util.CallMethodLuaManager.CallFunctionLuaFunction.LazyCall 解决方案LuaFunction脚本无GC消耗的调用 用法总结 问题 用过luaframework框架的人应该都知道框架提供了Util的工具类,工具类提供了一个方法就是Util.CallMet…

toluaframework中C#怎么调用Lua的方法

  • 问题
    • Util.CallMethod
    • LuaManager.CallFunction
    • LuaFunction.LazyCall
  • 解决方案
    • LuaFunction脚本
    • 无GC消耗的调用
  • 用法总结

问题

用过luaframework框架的人应该都知道框架提供了Util的工具类,工具类提供了一个方法就是Util.CallMethod的方法,方便Unity中直接调用lua层的方法。

Util.CallMethod

        /// <summary>/// 执行Lua方法/// </summary>public static object[] CallMethod(string module, string func, params object[] args){LuaManager luaMgr = AppFacade.Instance.GetManager<LuaManager>(ManagerName.Lua);if (luaMgr == null){Debug.LogError("lua模块“" + module + "”未被找到");return null;}return luaMgr.CallFunction(module + "." + func, args);}

LuaManager.CallFunction

下面这里使用的框架提供的方法,但是这个方法是有GC的,我们在进入到luaMgr.CallFunction中查看一下

// Update is called once per framepublic object[] CallFunction(string funcName, params object[] args) {LuaFunction func = lua.GetFunction(funcName);if (func != null) {return func.LazyCall(args);}return null;}

从上面的代码中我们可以看到实际上他调用的是LazyCall(),这个方法的返回值是object[],这必然是需要我们自己拆箱装箱,有GC的操作,尽可能避免拆箱装箱可以减少性能的消耗。

LuaFunction.LazyCall

这个方法作者也提示了是有GC的,这里让我们使用的是Invoke的方法调用,这样我们不需要有装箱拆箱的转换操作,这里可以直接转换成我们需要的数据。

        //慎用, 有gc alloc[System.Obsolete("LuaFunction.LazyCall() is obsolete.Use LuaFunction.Invoke()")]public object[] LazyCall(params object[] args){BeginPCall();int count = args == null ? 0 : args.Length;if (!luaState.LuaCheckStack(count + 6)){EndPCall();throw new LuaException("stack overflow");}PushArgs(args);PCall();object[] objs = luaState.CheckObjects(oldTop);EndPCall();return objs;}

解决方案

这里我只举一个例子写一个两个参数的方法,多个参数的方法模仿我这个自己写就好了,需要多少参数写多少个方法即可

LuaFunction脚本

我们先看看这个脚本作者给我们提供了什么
这里作者给我们提供了无返回值的多参数Call的方法,也提供了有返回值的多参数Invoke
在这里插入图片描述

无GC消耗的调用

找到LuaManager脚本中原始有GC消耗的脚本,在他下方我们加两个多态写法
在这里插入图片描述
添加两个无GC消耗的多态方法

 	// Update is called once per frame 原始有GC的方法public object[] CallFunction(string funcName, params object[] args) {LuaFunction func = lua.GetFunction(funcName);if (func != null) {return func.LazyCall(args);//这里有GC}return null;}//有返回值并且有两个参数的无GC调用方法public R CallFunction<T1,T2,R>(string funcName, T1 t1,T2 t2){LuaFunction func = lua.GetFunction(funcName);if (func != null){return func.Invoke<T1,T2,R>(t1,t2);}return default;}//无返回值并且有两个参数的无GC调用方法public void CallFunction<T1, T2>(string funcName, T1 t1, T2 t2){LuaFunction func = lua.GetFunction(funcName);if (func != null){func.Call<T1, T2>(t1, t2);}}

打开Util工具类脚本,找到原始有GC的工具类调用方法
在这里插入图片描述
在这下方我们写两个调用方法封装一下

		/// <summary>/// 执行Lua方法 有GC/// </summary>public static object[] CallMethod(string module, string func, params object[] args){LuaManager luaMgr = AppFacade.Instance.GetManager<LuaManager>(ManagerName.Lua);if (luaMgr == null){Debug.LogError("lua模块“" + module + "”未被找到");return null;}return luaMgr.CallFunction(module + "." + func, args);}//无返回值无GC两个参数的方法public static void NoGCCallMethod<T1, T2>(string module, string func, T1 t1, T2 t2){LuaManager luaMgr = AppFacade.Instance.GetManager<LuaManager>(ManagerName.Lua);if (luaMgr == null){Debug.LogError("lua模块“" + module + "”未被找到");}luaMgr.CallFunction(module + "." + func, t1 ,t2);}//有返回值无GC两个参数的方法public static R InvokeMethod<T1, T2, R>(string module, string func, T1 t1, T2 t2){LuaManager luaMgr = AppFacade.Instance.GetManager<LuaManager>(ManagerName.Lua);if (luaMgr == null){Debug.LogError("lua模块“" + module + "”未被找到");return default;}return luaMgr.CallFunction<T1, T2, R>(module + "." + func, t1, t2);}

用法总结

下面是原始有GC的调用方法和无GC的调用方法,调用参考
在这里插入图片描述

http://www.yayakq.cn/news/24495/

相关文章:

  • 南昌it制作电商网站的公司企业服务账号
  • 大兴建站推广东莞竞价推广
  • 专业的教育行业网站制作wordpress域名 文件
  • 做外贸网站那家专业网络推广怎么做好
  • 网站开发交付验收文档东莞网站建设外贸
  • 龙岩网站设计招聘信息便捷的网站建设软件
  • 百度一下官方网站网站定制开发什么意思
  • 做零售的国外网站合肥建公司网站
  • 企业网站如何维护电商自建站
  • 0000网站建设建设政务网站报告
  • 网站免费空间哪里申请怎样做自己的国外网站
  • 可以网站可以做免费的文案广告ui培训机构哪家好
  • 做网站和网页17网站一起做网店的流程
  • 大连建设主管部门官方网站办公室设计说明
  • 齐齐哈尔城市建设档案馆网站网站说明页命名
  • 微软网站开发技术wordpress ie9
  • 做装修网站飞阳建设网站
  • 站群优化公司音乐网站开发环境描述
  • 自适应网站制作费用wordpress h5幻灯片
  • 阿里云租的域名怎么做网站福州网站推广
  • asp 网站权限设计哈佛门户网站建设特点
  • 济南软件优化网站建设网站做的好是不是影响就大
  • 清理网站后台缓存app编程软件有哪些
  • php网站后台登陆不了做跨境电商亏死了
  • 签订网站建设协议 注意事项wordpress域名自动重复
  • 提高图片网站访问速度中山短视频seo教程
  • 云南建设网站网站框架搭建
  • 天水市城市建设投资集团网站海南旅游网站开发背景
  • 什么网站可以在线做高中题目中国建设工程安全协会网站
  • 大连做网站公司广州企业建站