位置: 编程技术 - 正文

Unity 热更新之ULua 踩坑篇(unity热更新框架对比)

编辑:rootadmin

推荐整理分享Unity 热更新之ULua 踩坑篇(unity热更新框架对比),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity ilruntime热更新,unityxlua热更新方案,unity热更流程,unityxlua热更新方案,unity ilruntime热更新,unity lua热更新,unity 热更新方案,unityxlua热更新方案,内容如对您有帮助,希望把文章链接给更多的朋友!

Unity 的原生c#是无法在移动端上进行热更新的,那么如果线上发布遇到重大闪退事故的话,那么就不可以通过游戏内的热更新进行bug修复,只能重新提交版本,而往往在提交版本到发布的时间内,必然有玩家遇到这种问题,导致流失的,对于团队来说,这个可是很严重的。

所以我google了下,目前已经有开发者实现了这一功能,有c#Light ,ULua,Nlua等,lua在cocos上可以说是非常成功的,与C/C&#;&#;强大的交互能力,小巧高速的能力,在C/C&#;&#;上体现的非常好。

最近开始搞Unity,学习了下ULua(ULua,资料),撇开Luajit 位的坑。首先,打开ulua_v1..unitypackage,导入Ulua,如图:

uLua文件夹中 包含一些例子,还有LuaInterface的文档,可以学习学习。

导入成功之后,我们新建一个文件夹Scripts,新建一个Lua文件

,然后在子文件夹global新建一个c#文件,之后为了在c#中调用LuaEnterance.lua这个文件,得在c#中加入代码,同时引入命名空间using LuaInterface;这样才能调用LuaScriptMgr,这里建议将LuaScriptMgr对象声明位一个类成员。然后编译一下,没有问题!然后运行程序,就发现了第一个坑。

运行doFile函数的时候获取文件的路径通过

用的是deletage,类&#;于c&#;&#;的函数指针

然后为了获取准确路径,调用Util.LuaPath,

最后我发现doFile总是会到lua文件夹去找lua文件,这也太不自由了。当然我想到了其他可能性,或许作者为ulua打包做了处理,lua文件夹的文件有特别的好处?或者跟unity的机制有些关系?目前尚不清楚。

不考虑这些情况,我们可以简单做个处理。

然后运行,便发现成功了。。。

之后进行进行下一步,在c#中运行lua中函数,首先在lua文件中定义一个函数

然后在c#中获取它

然后在update中运行结果发现什么都没有输出。。。醉了醉了。遇到问题那就查!

推测Update这个函数没有获取到。看一下GetLuaFunction

每次获取缓存的lua函数,会尝试从Dictionary<string, LuaBase> dict中获取,然后这个key则是根据你传入的name而定的,那么问题就来了,不同文件下的同名函数怎么办?因为有些函数是Ulua内置的,都是在_G下的,有时候一不小心就可能命名一致,这里的问题也是因为这个导致的,ulua中自带一个Main.lua的文件,这个lua文件中有一个同名函数Update!!所以我们GetLuaFunction实际获得是这个函数!,因为其先被调用,并存在了dict中!LOOK! LuaScriptMgr中有这么一段Unity 热更新之ULua 踩坑篇(unity热更新框架对比)

它将一些基本的ulua库文件载入了,同时也运行了Main.lua,所以导致了这个错误。

如何解决?可以通过统一的命名规范避免这个问题。曾经还想过根据dofile的name来为getluafunction开航,不过也是有问题的,就是require ,因为lua的require做的差不多也是dofile干的事情,这样就定位不准确了,容易出问题,所以放弃了,感觉还是规范更好些。

后来本人测试了下ulua协程,结果发现也是有问题,报错。红叉叉的看着真是不舒服。

先写一段coroutine的测试代码。发现在wait这里断掉了。 = =。

改改改!修修修!

coroutine.start 会自动将传入的函数,作为coroutine.create的参数创建一个新的协程,并立刻resume执行,进入到Test函数,输出 "a simple coroutine test",然后wait ,依靠CoTimer,计算时间,这里需要做一个处理:在c#中执行

LateUpdate目的为的是执行CoUpdateBeat() ,这个函数是放在Main中的,不然cotimer不会更新,

Update目的是为了设置deltatime,不然lua中的deltatime会一直是0,影响定时器。

然后修改几处地方,在functions.lua中加入一个函数

看一下CoTimer

start的时候依赖的是CoUpdateBeat,而CoUpdateBeat是个Event,而Add正是在Event中声明的,并调用了functor,然后修改

中的行,利用刚才定义的handler让xpacall,这样就将所有的有参函数,都统一变为了无形参(忽略隐藏参数self)函数,更重要的是解决了cfunc与luafunc的调用问题,可以参考quick-cocos2dx的做法。

再次修改

同样用handler去构造coTimer,以上为的是解决CoTimer:Update的self丢失问题。

最后运行!!!

这里的时间误差是因为lua中Time用的是os.clock,而wait则是根据unity来的,准确的说应该是根据帧率来的,1s在unity中已经走完,所以根据unity,这样是么问题的。

OVER~~~~~

Optimizing Unity Games for Mobile Platforms 很好的一篇关于UNITY优化文章~!

[置顶] Unity3d的C#扩展方法Extension methods应用吧 扩展方法的条件:必须声明为静态类必须声明为静态方法方法的第一个参数为this首先来扩展Unity中的协程Coroutine,usingUnityEngine;usingSystem.Collections;usingSyst

[实用工具]Unity调用外部EXE或Shell命令 版权所有,转载须注明出处!喜欢火影、喜欢Java、喜欢unity3D、喜欢游戏开发的都可以加入木叶村Q群:、开门见山的需求有的时候,我们想把一

标签: unity热更新框架对比

本文链接地址:https://www.jiuchutong.com/biancheng/383559.html 转载请保留说明!

上一篇:unity 3d 生成apk文件时,设置图标(unity3d打包成apk)

下一篇:Optimizing Unity Games for Mobile Platforms

  • 小规模超过30万计算
  • 向农业生产者收购原木进项税怎么算
  • 认缴后怎么才算实缴
  • 小规模没有成本票怎么做账
  • 差额征税怎么填写申报表
  • 企业有利润要交什么税
  • 怎样查验电子发票真伪
  • 哪些产品计算消费税时可以扣除
  • 办公场所转租赁需要交哪些税费
  • 企业合并会计处理方法研究论文
  • 已抵扣的发票怎么开红字发票申请单
  • 装修公司在装修完后增加费用
  • 国税退税需要多长时间
  • 个人所得税多缴了可以退回吗
  • 商贸公司可以申请进出口权吗
  • 国税发200931号文件解读
  • 未分配利润转增股本 个人所得税
  • 餐饮发票一千多钱税
  • 企业购置房产交什么税
  • 金税盘百旺和航天
  • 免税收入包括哪些收入
  • 个人财产税是什么意思
  • 企业房租收入如何申报
  • microsoft阻止应用启动
  • 企业收到保险公司的赔款
  • 如何将win11任务栏变小一点
  • 电脑进不去系统一直在启动界面
  • mac怎么设置默认程序
  • WIN10怎么禁止始终处于活动状态
  • 公司取得的发明专利
  • 股息红利要交税吗
  • 出售固定资产增值税怎么处理
  • 超市进货产品
  • 微信小程序四人游戏
  • 车辆购置税税收缴款书
  • 出口流程步骤
  • 年底社保怎么交
  • pc端微信扫码支付
  • 待安置期间生活补助费多少钱
  • vue 百度地图 移动端
  • 毕业证原件掉了可以报考社工证吗
  • 上月的会计分录做错了
  • 图文处理是做什么工作
  • 研发费用加计扣除的条件
  • 新注册的小公司要登记社保吗
  • 运费已付发票未到会计分录
  • 购买工程物资是什么费用
  • 酒店低值易耗品怎么摊销
  • 企业发生销售退回时,不论销售退回的商品
  • db2udb
  • 差旅费津贴要交税吗怎么算
  • 长期股权投资采用成本法核算的,应按被投资单位
  • 委托加工物资实际成本包括增值税吗
  • 投资收益会计科目账务处理
  • 车辆维修费如何赔偿
  • 产假工资扣税
  • 金税盘全额抵扣申报表怎么填
  • 应付账款跟应收的区别
  • 固定资产报废属于非流动资产处置损失吗
  • 企业会计制度怎么写
  • 什么是活页式账户
  • mysql多个group by
  • mysql coalesce函数用法
  • ubuntu 16.04下mysql5.7.17开放远程3306端口
  • win7 32位旗舰版电脑城下载
  • 雨林木风 u盘
  • 深度u盘装xp系统教程
  • win7无法双击打开软件
  • windows7出现错误恢复怎么办
  • window10分屏显示
  • unity做cg
  • node js安装教程
  • jquery鼠标点击事件怎么写
  • javascript中的匿名函数
  • 江苏囯税电子
  • 中国税务是做什么的
  • 申报期包括不包括最后一天
  • 铅球七米
  • 煤炭资源税税率选煤税率多少黑龙江
  • 江苏发票认证平台app
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设