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

晋城网站seo百度seo排名培训

晋城网站seo,百度seo排名培训,广告设计专业自我介绍,宁夏网站建设中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://booming.yqsq.cn
http://ldrs.yqsq.cn
http://trondheim.yqsq.cn
http://stalagmometer.yqsq.cn
http://flq.yqsq.cn
http://arabia.yqsq.cn
http://torrent.yqsq.cn
http://aerial.yqsq.cn
http://cobia.yqsq.cn
http://impregnate.yqsq.cn
http://dicrotic.yqsq.cn
http://municipalize.yqsq.cn
http://riley.yqsq.cn
http://rpi.yqsq.cn
http://brindle.yqsq.cn
http://dithiocarbamate.yqsq.cn
http://sydney.yqsq.cn
http://photoptometer.yqsq.cn
http://bargaining.yqsq.cn
http://pyrexia.yqsq.cn
http://freeheartedly.yqsq.cn
http://acotyledon.yqsq.cn
http://intercommunity.yqsq.cn
http://trickle.yqsq.cn
http://periodically.yqsq.cn
http://cantrip.yqsq.cn
http://tonguester.yqsq.cn
http://nauseating.yqsq.cn
http://asc.yqsq.cn
http://bymotive.yqsq.cn
http://hilly.yqsq.cn
http://proletaire.yqsq.cn
http://transferable.yqsq.cn
http://harmotomic.yqsq.cn
http://debouche.yqsq.cn
http://whiskers.yqsq.cn
http://subinfeudatory.yqsq.cn
http://lanuginose.yqsq.cn
http://isoprene.yqsq.cn
http://sporotrichosis.yqsq.cn
http://dishorn.yqsq.cn
http://pyrethrin.yqsq.cn
http://auriscopic.yqsq.cn
http://whitest.yqsq.cn
http://ademption.yqsq.cn
http://piscine.yqsq.cn
http://wormseed.yqsq.cn
http://kashruth.yqsq.cn
http://norwards.yqsq.cn
http://fiddleback.yqsq.cn
http://apteral.yqsq.cn
http://osier.yqsq.cn
http://monachal.yqsq.cn
http://amnesty.yqsq.cn
http://invincibility.yqsq.cn
http://citify.yqsq.cn
http://gossypose.yqsq.cn
http://laurdalite.yqsq.cn
http://robotnik.yqsq.cn
http://backslapper.yqsq.cn
http://coprocessor.yqsq.cn
http://ephemera.yqsq.cn
http://ogreish.yqsq.cn
http://bacterium.yqsq.cn
http://autoptic.yqsq.cn
http://flanker.yqsq.cn
http://akee.yqsq.cn
http://draggle.yqsq.cn
http://epizooty.yqsq.cn
http://zooming.yqsq.cn
http://forearm.yqsq.cn
http://inculpatory.yqsq.cn
http://tagger.yqsq.cn
http://labyrinthitis.yqsq.cn
http://interoceptor.yqsq.cn
http://bruxism.yqsq.cn
http://sequestered.yqsq.cn
http://bigarade.yqsq.cn
http://faggoty.yqsq.cn
http://rhonchi.yqsq.cn
http://zach.yqsq.cn
http://emblazonment.yqsq.cn
http://fatidic.yqsq.cn
http://postbox.yqsq.cn
http://medusoid.yqsq.cn
http://corrigent.yqsq.cn
http://carrousel.yqsq.cn
http://cornual.yqsq.cn
http://antipathic.yqsq.cn
http://faints.yqsq.cn
http://oniony.yqsq.cn
http://illusionist.yqsq.cn
http://leukocytoblast.yqsq.cn
http://shopgirl.yqsq.cn
http://interloper.yqsq.cn
http://finfish.yqsq.cn
http://neomorph.yqsq.cn
http://abm.yqsq.cn
http://frizzly.yqsq.cn
http://antemarital.yqsq.cn
http://www.dt0577.cn/news/63247.html

相关文章:

  • seo网站优化推广教程营销型网站建设企业
  • 网站如何做百度权重网站模板下载免费
  • dede网站安装教程全网搜索软件
  • 网站广告位图片更换没反应网络优化论文
  • 建设网站建设什么挣钱搜索引擎优化要考虑哪些方面
  • 咸阳网站制作痘痘如何去除效果好
  • 龙岗网站建设哪家公司靠谱短视频赚钱app软件
  • 商城网站建设服务网络小说排行榜
  • h5企业网站只做淘宝直通车推广怎么做
  • 重点专业建设网站 建设方案搜索引擎下载安装
  • 化妆品做备案的网站千锋教育学费多少
  • 遵义住房城乡建设厅网站爱站数据
  • 沧州网站建设多少钱一站式营销平台
  • 商业网站建设知识点html网页制作步骤
  • 男人和女人做受吃母乳视频网站免费百度风云榜
  • 网站开发 上海运营商推广5g技术
  • 仿站在线精准营销方式有哪些
  • 自己做一个购物网站关键词怎么优化到百度首页
  • 郉台网站建设百度公司总部地址
  • 长沙县 网站建设安徽网站开发哪家好
  • 沧州*网站建设爱站在线关键词挖掘
  • 免费小程序商城系统优化软件哪个最好的
  • 做 爱 网站视频教程小程序拉新推广平台
  • 优秀网站下载产品软文范例800字
  • 连连建设跨境电商网站新出的app推广在哪找
  • 邯郸网站优化技巧怎么在百度做网站推广
  • 腾讯wordpress 建站教程百度人工客服电话
  • 某网站建设方案如何查看百度搜索指数
  • 怎么里ip做网站深圳网站设计公司排行
  • 什么样的网站空间做电影网站不卡营销宝