首页 > 其他分享 >Unity HybridCLR(wolong)/huatuo系列

Unity HybridCLR(wolong)/huatuo系列

时间:2023-11-08 14:34:06浏览次数:44  
标签:代码 wolong Lua Unity huatuo HybridCLR native

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

 

这两年,各种Unity热更新方案如雨后春笋般出来了,今天来写篇文章来对比一下Unity各大热更新方案的优缺点。目前主流的Unity热更新的方案有:

  Lua系解决方案: 内置一个Lua虚拟机,做好UnityEngine与C#框架的Lua导出。典型的框架有xLua, uLua,大体都差不多。

  ILRuntime解决方案: 内置一个.net 字节码解释器,解释执行.net字节码。

  puerts解决方案: 内置一个JavaScript/TypeScript解释器,解释执行TypeScript代码。

  HybridCLR(wolong) huatuo: HybridCLR(wolong)之前的名字叫做huatuo,在Unity的il2cpp里面添加一个可以装载.net字节码,解释执行.net的字节码的功能。

 

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

(1) 可热更的代码的范围;

(2) 发布新版本的时,新版本的性能与老版本热更;

(3) 热更解释执行效率的对比分析;

(4) 哪种方案更符合开发者的开发习惯;

 

 

可热更的代码的范围对比

 

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

 

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

 

HybridCLR(wolong) huatuo方案: 在IL2CPP VM中内置一个.net 字节码解释器,同时还会把.net里面的数据对象映射到native 的数据对象,所以huatuo的任何c#编写的代码都可以热更新。

 

这一局, HybridCLR(wolong) huatuo完胜。可以更新任意C#实现的代码,如果要热更新,就把这个c#代码所在的.dll字节码库装载到il2cpp vm 就可以解释执行,如果不加载.dll的字节码,就使用原来的 il2cpp的native代码。

 

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

 

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

 

 

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

 

  这局又是HybridCLR(wolong) huatuo完胜,使用HybridCLR(wolong) huatuo热更方案的时候,你不用管哪些要热更,哪些不用热更新,只要按照模块利用Unity 的ADF机制来生成不同的项目,并生成对应的.dll, 底层打包的时候,都统一用il2cpp转成native code, 如果新版本哪个.dll 要更新了,只要把生成的新版本的.dll放服务器上,那么就从服务器装载进来到il2cpp vm中,这样就可以解释执行。所以HybridCLR(wolong) huatuo 和普通的Unity开发几乎一样。

  而其它的方案,都要分成native c# 工程和热更项目代码,这样不方便相互之间的调用,还要维护热更代码与框架代码等,比较麻烦,不符合普通Unity的开发习惯。如果你有一个Unity的项目要支持热更新,一定使用HybridCLR(wolong) huatuo方案能让你少改代码。所以开发习惯这块,HybridCLR(wolong) huatuo优于其它的方案。

 

通过几个对比,以HybridCLR(wolong) huatuo为代表的基于il2cpp vm的热更方案,将会是Unity热更方案的主流首选。如果不出意外,未来的热更的趋势就是HybridCLR(wolong) huatuo这种技术原理的热更方案。

 

标签:代码,wolong,Lua,Unity,huatuo,HybridCLR,native
From: https://www.cnblogs.com/rainy1unity/p/17817348.html

相关文章

  • Unity性能调优技术集锦
    性能调优,一直是游戏上线之前的很重要的一个环节,游戏帧率过低,手机发烫,低端机上跑不起来等,这些都需要来做优化,今天我们来给大家分享Unity做性能调优的常用技术手段。 性能调优的指导思想 接触过很多刚做性能调优的小伙伴,他们做性能调优最大的问题就是缺乏一个做性能优化......
  • Unity 编辑器UI 杂记
     用 rootVisualElement方法绘制按钮和用 GUILayout.Button绘制按钮混用的案例usingSystem.Collections;usingSystem.Collections.Generic;usingNUnit.Framework;usingUnityEditor;usingUnityEngine;usingUnityEngine.UIElements;publicclassMyTestPanel:......
  • WPF 使用 CommunityToolkit.Mvvm
    参考文档: IntroductiontotheMVVMToolkit-CommunityToolkitsfor.NET|MicrosoftLearn它是一个现代化,快速和模块化的MVVM库,对应用程序的结构或编译规范没有严格的限制。NuGet安装包搜索:CommunityToolkit.Mvvm导入usingCommunityToolkit.Mvvm;使用ObservableObjectpubli......
  • Unity游戏排行榜制作与性能优化
    游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点:(1) 游戏排行榜排序算法核心算法实现;(2) 游戏排行服务器如何制作;(3) Unity客户端如何对接与请求排行榜数据;(4) Unity如何优化......
  • Lua,ILRuntime, HybridCLR(wolong)/huatuo热更对比分析
    这两年,各种Unity热更新方案如雨后春笋般出来了,今天来写篇文章来对比一下Unity各大热更新方案的优缺点。目前主流的Unity热更新的方案有:Lua系解决方案:内置一个Lua虚拟机,做好UnityEngine与C#框架的Lua导出。典型的框架有xLua,uLua,大体都差不多。ILRuntime解决方案:内置一个......
  • huatuo示例项目源码分析与启发
    上一节我们安装huatuo的开发环境,然后运行示例项目,体验了huatuo做热更新,这节课我们来分析示例项目的源码,掌握huatuo做热更新的主要的步骤,让你自己的项目很好的基于huatuo来组织热更新。有几个huatuo的原则要清楚:(1)UnityADF机制来分项目,可以分成若干项目,避免大量代码长时间的编......
  • Unity如何优化Drawcall
    降低游戏的Drawcall,是渲染优化很重要的手段,接下来从以下4个方面来分析如何降低DrawCall:(1)降低Drawcall的意义是什么?如何查看游戏的Drawcall;(2)Drawcall合批的常用的技术手段原理与优缺点;(3)组织项目让Drawcall最小需要注意的点;搞清楚这些,Drawcall的优化基本上就能很......
  • Unity性能优化之内存篇
    本文和传统的内存优化不一样,不是讲如何降低内存占用,而是讲编程开发中要注意的内存问题以及一些内存技术的演变与原理。 本文很长,目录如下:(1)Application进程的内存分段;(2)OS动态内存分配与手动内存管理;(3)什么是内存碎片,避免内存碎片常用手段;(4)什么是内存泄漏,预防与......
  • 如何做好Unity项目性能优化
      在面试中,我们经常会被问各种”莫名奇妙”的问题,比如这道:”你是如何做好Unity项目性能优化的?”。“这个问题也太泛了吧,没有具体的优化点,这怎么回答?”瞬间跃入脑海。做面试复盘的时候,你可能会想这个面试官是不是什么都不懂,是个”青铜”啊。没错,能问这道问题的面试官要么......
  • Unity的粒子总是丢材质
    1)Unity的粒子总是丢材质2)C#传给C++的Byte数组如何释放3)CommandBuffer.DrawProcedural在手机上为什么不生效4)游戏加载场景碰撞,会弹出显卡报错,驱动程序超时这是第359篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学......