作为游戏开发者,如何看待腾讯最新发布的Unity热修复工具InjectFix?
在Unity引擎上,目前主流的热更新方案有xLua,sLua,toLua,ILRuntime(基于C#),还有一些使用ILRuntime开发的如ET,CSHotfix,XIL等 InjectFix的作者,同时也是xLua的作者来答一波。先回题主的问题:其实这问题在腾讯开源公众号发布的公告那也描述得挺清楚的,简而言之,InjectFix是xLua的hotfix功能(公告那称之为“热修复”)的升级版。
和ILRuntime的区别从用户视角看,ILRuntime要更新的整个模块要挪到一个dll里头,“整个模块”解析执行。而InjectFix不需要对工程重构,当工程不需要更新时,全部代码都以原生方式运行,有更新的话,仅仅待更新那少数几个函数切换到解析执行。
而CSHotfix,XIL,也是“热修复”方案,据我所知,它们访问原类的私有变量之类是要特殊的写法,一个类成员方法往往避免不了这些写法,因此你要修复一个很大的函数,对原来逻辑的重新实现往往是无可避免的。而InjectFix在原工程哪行错误改哪里即可。
ET好像是个使用了ILRuntime的一个C#框架吧。和InjectFix关系不大,属于两类东西没可比性。
如果仅仅修C# bug,目前方案中,InjectFix应该是最好用的。缺点嘛,公告也说了,不能新增功能。其实这“不能”,更多是人为的设定,InjectFix在对Unity协程,闭包的支持中其实是包含了对新增class的支持,只不过人为约束了仅这些场合使用。公告也分析了,这样更符合苹果的热更新条款。
至于某层提到的产品化问题,这里也答一下:
InjectFix(内部叫iFix,因外部商标被注册被迫改名,打听的时候记得说iFix)项目在xLua对外开源不久后就有想法了做了,在2017年下半部开始研发,2018年初对内发布。目前“已知”有9个项目在用,其中4个已经正式上线,没上线的也用于他们平时体验版本的修复,第一个使用iFix的项目至今已经使用了1年多。9个说多也不多,但新项目用ue的居多,所以说少其实也不少。
至于“多年脱产”嘛,也是,但前面也说了,InjectFix和xLua同一个作者,xLua在2015年研发,作者在热更新方面领域也默默耕耘了4年多了,期间和很多内部项目交流相关需求,在外部xLua的两个千人+的群,前期也有很多交流。iFix从设计之初就考虑了很多项目的痛点。脱产也有脱产的好处,不会优先考虑自家的问题,在一个公共组件中做了很多私有特性,脱产不可怕,脱产+闭塞才可怕。然而个人还是蛮喜欢和项目交流的,开源也是为了和更多的人交流。 原答案存在不实信息
怎么看 没法看
推广文里还写了 “有兴趣可以看源码了解”
结果源码全在 DLL 里
我难道去看 你的 helloworld 是怎么写的?
不懂这种开源干嘛
既然不想给源码 直接弄到 assetstore 算了呗
放github 上又只放dll。。。 希望能尽快加入async await方法的修复,毕竟await太好用 先看看腾讯内部的项目有没有用上,用的咋样?有没有最终产品化~
据我所知,Xlua,Slua使用的更多一些
腾讯内部这种组件的研发部门都是多年脱产的,想真正工程化还有很多的工夫要做。
页:
[1]