Unity划时代热更方案 YooAsset+HybridCLR(wolong)(原huatuo)(一)

Unity划时代热更方案 YooAsset+HybridCLR(wolong)(原huatuo)(一)

Lua,ILRuntime, HybridCLR(wolong)/huatuo热更对比分析

unity近年来有很多热更方案,有已经很成熟的xlua、ulua和unity官方推荐的ILRuntime,还有近期发布的HybridCLR。都是目前主流的Unity热更新的方案:
Lua:内置Lua虚拟机+UnityEngine与C#框架的接口导出+Lua代码。
ILRuntime:内置.net字节码解释器(虚拟机)+解释执行.net字节码。
HybridCLR(wolong):在Unity的ilcpp里添加了可以装载.net字节码,解释执行.net的字节码的功能。

接下来我们从几个点来分析比对这几个热更新的方案:

可热更的代码的范围对比

Lua,方案都是项目种内置Lua虚拟机,它能热更的范围是使用Lua开发的所有脚本都可以热更,C#开发的代码可以通过提前的hotfix来做热更补丁。虽然Lua方案看上去Lua代码和C#代码都可以热更,但是其实hotfix来做c#代码热更的时候,需要打标记,你无法预判哪些需要C#可能会被更新,同时hotfix经过几个版本迭代,以前版本有热补丁,新版本没有热补丁,管理起来非常的麻烦。

ILRuntime,是unity内置.net字节解释器/TypeScript/JS解释器,在热更项目中编写的代码,都可以热更,但普通C#编写的代码无法热更新。

HybridCLR,在IL2CPP VM中内置一个.net字节码解释器,同时还会把.net里面的数据映射到native的数据对象,所以HybridCLR的任何C#都可以热更。

可见HybridCLR对比其它的方案有很大的优势。可以更新所有CSharp实现的代码,如果要热更新,就把这个CSharp代码所在的.dll字节码库装载到il2cpp vm就可以解释执行,如果不加载.dll字节码,就使用原来的il2cpp代码。

新版本的性能与老版本热更

这一局也是HybridCLR(wolong) huatuo完胜,当有新版本发送的时候,比如1.0, 我们开发了一些热更代码,到2.0, 发布2.0的时候,1.0的是热更了服务器上的代码解释执行, 2.0是直接代码就可以了,但是Lua/purets/ILRuntime 2.0版本都是解释执行,而HybridCLR(wolong) huatuo, 1.0是加载更新的.dll 到il2cpp vm虚拟机,解释执行IL字节码。但是当我们发布2.0的时候,就不用加载.dll, 那么直接使用2.0 il2cpp转好的native代码直接可以被机器执行,所以其它方案都是解释执行,而HybridCLR(wolong) huatuo新版本是native 代码。总结一下Lua/ILRuntime/puerts热更方案,新版本都是解释执行热更代码,而HybridCLR(wolong) huatuo使用native代码直接运行,新版本native性能,比解释执行性能要好。

热更解释执行效率的对比分析

上面分析了,新版本的时候,Lua/ILRuntime/puerts仍然是解释执行,而HybridCLR是native code,接下来分析一下都是热更解释执行效率与性能的对比,Lua/ILRuntime/puerts是在C#层内置虚拟机,所以热更代码的内存,都是运行在虚拟机域的内存对象,如果要访问native c#的对象,都要用函数包起来来访问,而HybridCLR在解释执行IL字节码的时候,先把字节码的对象内存,映射成native内存块,所以热更解释执行IL字节码的同时,能直接访问 native内存对象。这样就不用像其它热更一下用函数包起来,性能达到最好。数据对象的内存访问已经讨论了,接下来在看解释执行,都是解释二进制字节码,这些解释执行的效率基本都在一个数量级上,由于HybridCLR可以直接访问native 内存对象,所以热更部分的执行性能上HybridCLR要优于其它方案。

哪种方案更符合开发者的开发习惯

这局又是HybridCLR完胜,使用HybridCLR热更方案的时候,你不用管哪些要热更,哪些不用热更新,只要按照模块利用Unity 的ADF机制来生成不同的项目,并生成对应的.dll, 底层打包的时候,都统一用il2cpp转成native code, 如果新版本哪个.dll 要更新了,只要把生成的新版本的.dll放服务器上,那么就从服务器装载进来到il2cpp vm中,这样就可以解释执行。所以HybridCLR和普通的Unity开发几乎一样。
其他方案,都要分成native C#工程和热更项目代码,这样不方便相互之间的调用,还要维护热更代码与框架代码等,比较麻烦不符合突通unity的开发习惯。如果你有一个unity的项目要支持热更,一定选择HybridCLR热更方案,可以使你减少代码的修改。
所以HybridCLR热更方案优于其他的热更方案。

在下一篇中将介绍HybridCLR在unity中的安装和使用

猜你喜欢

转载自blog.csdn.net/weixin_43298513/article/details/132401341
今日推荐