加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

腾讯正式开源面向 Unity 项目的 Bug 修复神器 InjectFix

发布时间:2019-09-13 20:11:55 所属栏目:建站 来源:局长
导读:InjectFix是腾讯最新对外开源的Unity代码逻辑热修复方案,可实此刻Unity线上客户端内,不消迭代新版本,就能快速修复游戏的线上bug。 先说几个亮点: 直接在Unity工程上修改C#即可更新;老项目无需修改原有代码即可行使; 更切合苹果热更新条款; 每个游戏
副问题[/!--empirenews.page--]

InjectFix是腾讯最新对外开源的Unity代码逻辑热修复方案,可实此刻Unity线上客户端内,不消迭代新版本,就能快速修复游戏的线上bug。

腾讯正式开源面向 Unity 项目标 Bug 修复神器 InjectFix

先说几个亮点:

  1. 直接在Unity工程上修改C#即可更新;老项目无需修改原有代码即可行使;
  2. 更切合苹果热更新条款;
  3. 每个游戏一份私有补丁名目,安详更有保障。

InjectFix经腾讯内部多个项目应用反馈异常精采,不只能办理线上bug,还可以有用的进步一般开拓服从,下面我们聊下这项目标宿世此生。

热更方案大乱斗

全部支持iOS的热更方案都有个配合点:更新儿女码都是理会执行。假如按其更新前是否理会执行,可以分为两大类:

一类是某些模块乃至整个游戏,都一向理会执行。这是最传统的方法,今朝市面上全部主流方案(xLua,slua,tolua,ILRuntime,jsb等等)都支持这种方法。这种方法的特点:

  1. 或多或少城市有些侵入性:ILRuntime理会执行C#编译后的措施集,在这些方案里头侵入性也许最小,但也必要对代码重构,把要更新的逻辑拆到单独措施集。各类非C#的剧本侵入性最大,一个已经完成的纯C#项目要用意味着重写。

ps:也有一种思绪是通过一个C#转XX剧本器材来实现C#编码,理会执行,但假如你是一个已有项目想这么转一下,或许率是失败的,除非你一开始就在用这方法在开拓,遇到坑就避开,由于这类方案每每不是完备支持所有语法,支持的语法也不必然能完全同等。

  1. 基于机能,实现便利性等的思量,一样平常游戏有些处所要以原生的方法跑,这些原生跑的代码出了bug这种方法是无能为力的。
  2. 假如行使的剧本是动态范例说话,还会带来代码维护坚苦的题目。
  3. 利益是可以新增成果,有的游戏乃至可以做到一次下载,后续不消整包更新。但苹果条款说明的章节可以看到,这也不必然是功德。

其它一类是以原生方法跑,假若有bug,把逻辑重定向到新的,理会执行的逻辑。这种方法的特点:

  1. 侵入性低,后期项目也可以行使。
  2. 正常逻辑是原生方法运行,有题目只是局部切换到理会执行,以是机能较量好。
  3. 会导致代码段增大,增大正比于注入的类的数目。
  4. 这种方法每每难以新增成果。

第二种方法是接下来接头的重点,利便起见,我们称之为“热修复”,热修复最早的成熟方案是xLua提供,颠末两年来的行使已经逐渐被接管,tolua#其后也插手了这成果,也有一些网友基于ILRuntime做了热修复成果。

InjectFix是什么?

InjectFix就是一个热修复的实现。那它和其余热修复方案又有什么差异呢?

假想这么个场景,我们有一个一千行代码的函数,个中有一行有题目,我们必要修复它。

假如用xLua,必要用lua去从头实现一遍这个函数,事变量大。而基于ILRuntime的热修复,因为其补丁是另一个措施集,它无法直接会见原类的私有成员,以是那999行正常代码一样平常也不能直接行使,必要做较多修改。

而InjectFix不必要用lua,也不必要像ILRuntime热修复那样其它建一个工程把那一千行逻辑重实现。只必要在Unity原工程直接改掉这行代码,然后标注这函数要更新即可。

不只云云,InjectFix尚有其余上风:

  • 运行时很是小巧,仅100K阁下,比各lua方案,ILRuntime都要小许多,并且不依靠第三方库,纯C#实现。
  • 支持每个游戏天生一份本身私有的补丁名目,私有的指令界说。这样对比通用的lua原代码,lua字节码,clr措施集都更安详些。
  • 支持Assembly-CSharp.dll之外的dll的修复。
  • 免代码天生,更干净。

它也有弱点,不支持新增类,也不支持在已有类新增字段,修bug照旧够用的,但难以通过热更为游戏增进新成果。InjectFix就一个纯粹的修bug器材罢了。

黑科技

因为InjectFix支持一再加载补丁,新加载补丁会自动包围上一个,这特征可以用来实现真机代码逻辑及时修改。

腾讯正式开源面向 Unity 项目标 Bug 修复神器 InjectFix

(视频地点:https://v.qq.com/x/page/v09240mo6ai.html?&ptag=4_7.2.5.22206_copy)

苹果政策合规性

各热更方案群的问的频率最高的题目之一:这方案会不会导致我游戏苹果考核不通过。

让我们看看苹果的热更新条款:

腾讯正式开源面向 Unity 项目标 Bug 修复神器 InjectFix

可以看到最新条款应承下载代码理会执行,但条件是不能通过新增特征和成果来把措施改得(和考核时对比)涣然一新。再看看凡是被拒时的来由中的Guideline 2.5.2里的一句:

Your app, extension, or linked framework appears to contain code designed explicitly with the capability to change your app’s behavior or functionality after App Review approval。

有“新增特征和成果”手段的热更新方案的忧伤之处在于有“改得涣然一新”的手段。而InjectFix从它提供的手段(只能修改已有函数)来看,并不具备“新增特征和成果”的手段,这原来是瑕玷,放在这里却成为合规性的担保了。

根基道理

InjectFix项目标研发挺曲折的。InjectFix和xLua是统一个作者,也是本文笔者,其时xLua开源后,不绝有人提但愿提供个C#转lua的器材,而深入研究认为实现个il假造机事变量还更小,这样还能停止lua的一些gc题目。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读