Unity 热更新 之 huatuo(HybridCLR)

这篇具有很好参考价值的文章主要介绍了Unity 热更新 之 huatuo(HybridCLR)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一句话说说huatuo和Hybridclr:

huatuo是途游开源的,之前hybird的作者在途游,后来开源华佗,后来被途游收回,就写了hybirdCLR;

一、Unity - IL2CPP技术原理与AOT

 阶段1:C#发展,---> windows系列平台  ---->  微软标准 .net的标准开发出来;

                只需要开发出来符合.net字节码的标准代码,就可以让代码在.net上运行起来。

阶段2:项目 --- > Mono项目,.net虚拟机(Linux、windows、Androud等平台)+.net开发环境;

                C# ---> Mono ---> .net字节码 ----> .net虚拟机上运行起来。

阶段3:早期Unity --->  Mono方案 ----> 实现跨平台

阶段4:Unity --->使用Mono的问题?

        a;程序的执行效率,.net字节码 ----> 运行的;

        b:Mono虚拟机的移植 ---> webgl --->  bug,mono ----> Unity ---->;Unity 跨平台会收到限制;

        c:版权问题,Unity Mono. .net授权

找出了另一条技术路线IL2CPP项目

        IL是什么?Intermediate Language 是一种通用的语言架构和.net框架的低阶(lowest-level)的编程语言

        CLI是什么?Common Language Infrastructrue 特指在.net平台下的IL标准,CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的,它运行在.net虚拟机上。

        所以IL与CLI在Unity开发中 ---> 同一件事情.net平台下的字节码程序。 ----> IL标准是开发的(没有版权问题)

        .net工具:Unity开发的C#代码 ---> IL字节码;(可以使用标准的.net开发)

        IL2CPP项目: IL字节码 ---> 静态编译型语言(C语言,C++)的代码;简言就是IL --转--> C++代码

        后来就可以使用xcode、android NDK windows visual studio c++ 来编译我们的代码,把我们的代码编程本地的机器指令,直接在OS上执行---> 效率 高于 .net的解释执行。

        AOT是什么?Ahead of time 离线编译,把高级语言 ----> 静态语言  ----->  直接编译成二进制机器指令;

        IL2CPP 这个项目而言 :采用的AOT技术

        JIT技术:Just In Time 运行时编译成二进制机器指令

        IL2CPP vm:IL2CPP的虚拟机,更像一个库,提供一些服务;(gc垃圾回收、IL2CPP编写一些库来提供服务)

        运行时的时候:Unity  == IL2CPP技术编译出来的二进制指令 + IL2CPP runtime的环境(GC,Thread等技术支撑)

        Interpreter:解释执行

过程图:

Unity 热更新 之 huatuo(HybridCLR)

二、huatuo热更新原理

huatuo热更新是基于IL2CPP VM这个环节来的,和其他热更技术不同;

Lua方案:Lua内置Lua虚拟机 + Lua代码 (是在Native excutable asm 环节)

ILRuntime方案:内置C#虚拟机 + 解释执行ILRuntime (是在Native excutable asm 环节)

内置虚拟机:会有自己解释执行的一个运行环境,无法直接继承MonoBehaviour(IL2CPP 级别的数据对象),需要封装一层;

                        会有跨域访问、接口导出等问题 ---> 需要开发者自己来处理;::: 麻烦点,不符合标准的Unity开发,需要另外做一套另个标准的开发。

 2.1 huatuo到底做了什么呢?

IL2CPP runtime 环境(IL2CPP VM)编写了一个解释器,解释执行IL代码指令 + 使用的是AOT的数据内存对象

正常IL2CPP 执行: 数据内存 + 代码逻辑指令(二进制机器指令);

huatuo IL2CPP 执行:数据内存(GameObject)+ 代码逻辑指令(二进制机器指令)+ IL代码指令解释执行

所以huatuo在热更的时候,可以随意的继承所使用的GameObject、MonoBehvaviour;

huatuo在使用数据对象时,这个数据对象就是AOT里的东西,热更项目的类型编译进去就可以了;

huatuo在执行时就是,解释执行IL new GameObject  ---> new AOT的GameObject对象;

热更流程:

热更  -----> IL.dll ----> 运行的时候,huatuo加载IL.dll 来解释执行;

当有更新时,可以将IL.dll 编译发布,然后放在服务器上,客户端运行时检查更新,下载最新的IL.dll, 最后IL2CPP vm 转载IL.dll 就实现了热更新。

三、huatuo为什么性能高,比其他热更新方案的优势有哪些

 优势:

1.huatuo直接使用的是AOT项目中的内存对象,内存的占用,跨域都没有问题;(性能好,内存占用少)

2.huatuo不用改变上次的开发习惯(不需要另外搞个虚拟机,搞个热更项目)

3.其他热更项目所不具备的功能,热更后,可以改变执行方式(

            比如:原来是Lua、ILRuntime热更新的,从1.0 -到- 2.0,就算更新完成,执行方式不会变,一开始是解释执行,更新完,还是解释执行;

            但是,huatuo,可以实现从1.0(的解释执行) --更新到---> 2.0(的直接AOT执行)

4.开发方式:huatuo不需要特殊的开发模式,直接Unity开发完就完事了。(不会有热更时的一些问题如:需要特殊的开发模式、需要热更项目、不能直接继承、接口导出等)

5.huatuo可以理论上更新任何代码,而普通的模式是 框架 + 热更,框架是不可以热更的。

四、huatuo热更新开发环境搭建与测试

 环境准备:

        unity

        visula studio

        IL2CPP for windows (不同平台有不同的IL2CPP,这里用的是windows平台)

Unity IL2CPP 下载 https://unity.com/releases/editor/whats-new

         打开上面官网,选择自己Unity版本,然后在Component Installers下选择,你要下载的组件,这里下载 IL2CPP 根据你的平台下载即可。

huatuo准备:

        a:huatuo核心代码库:IL代码指令解释执行;

        b:IL2CPP_huotuo:IL2CPP的库,huatuo需要做一些补丁修改,不含huotuo核心代码 + huaduo核心代码运行的必要环境;

        为何什么会分开呢?是因为IL2CPP是Unity维护的,为了应对Unity对它的变化,所以分开。

huatuo示例项目:从示例项目中启发,用到我们的项目中;

huatuo-trial

github 国外下载https://github.com/focus-creative-games

码云

国内下载https://gitee.com/focus-creative-games

要注意:huotuo-main(hybridclr-main)是huatuo的源项目、huotuo-trial(hybridclr_trial-main)示例项目、il2cpp_huotuo(il2cpp_plus-main)库项目、hybridclr_unity-main是Unity的包配置项目。

hybridclr_unityhttps://gitee.com/focus-creative-games/hybridclr_unity        打开后,点击克隆/下载---> HTTPS 链接 点击复制即可拿到该git链接。

        Unity 热更新 之 huatuo(HybridCLR) 

准备好以后,就可以开始搭设了。

这里使用的是Unity2021.3.6.f1  hub3.0.1 Hybrid CLR是v2.1.0 il2cpp_plus是v2021-2.1.0

step:1打开Unity工程,在菜单栏Window ---> Package Manager ---> 选择+号 ---> Add package for dis...(从本地添加包)选择hybridclr_unity-main下的package.json,点击打开,即可添加进来。

Unity 热更新 之 huatuo(HybridCLR)

Unity 热更新 之 huatuo(HybridCLR)

Unity 热更新 之 huatuo(HybridCLR)

Unity 热更新 之 huatuo(HybridCLR)

         这一步,也可以直接选择使用git链接里的版本,操作如下:

        在PackageManager界面,点击+号后,选择 ...from git URL选项,然后复制(拿到)是上面hybridclr_unity里的git链接,粘贴进去,点击Add即可,会拿到最新的插件包。

Unity 热更新 之 huatuo(HybridCLR)

Unity 热更新 之 huatuo(HybridCLR)

step:2 在Unity工程中,菜单栏中会看到 HybridCLR选项,打开HybridCLR ---> Intaller... --->显示未安装,点击下面的安装(静静的等待,如果没有报错,并且安装状态是已安装,就说明安装好了)恭喜你了,安装成功!

Unity 热更新 之 huatuo(HybridCLR)

Unity 热更新 之 huatuo(HybridCLR)

Unity 热更新 之 huatuo(HybridCLR)

step:3.解压出示例项目(huatuo-trial)

step4:多个项目,Unity ADF机制,代码越多,每次修改一下,要全部编译,时间消耗比较麻烦;

             ADF机制,将项目分成多个不同的工程,然后每次修改后,只编译你自己所在的工程(节约编译时间),

             huatuo  ---> 就可以针对不同的dll(做热更新),不同的功能不同的dll。

step5:普通的直接走AOT,把这些DLL编译出来,生成到机器指令里,运行;

             然后在热更新的时候,ILCPP vm先加载我们的IL.dll就可以更新了。

            (也就意味着,我们在使用huatuo时,这几块的可以分开开发)

step6:运行一下热更项目。

                step6a:如何来分项目出来  --->  构建不同的.dll (使用Unity ADF)

                        在Unity中,在Project视口下Asstes下新建一个分项目的目录(GFGame),然后在这个目录里,右击选择Create ---> Assembly Definition ,就有了一个分项目集,Unity 热更新 之 huatuo(HybridCLR)然后在此文件加下创建脚本,

Unity 热更新 之 huatuo(HybridCLR)

在vs中打开,就会看到,他是独立在一个集下的,也就意味着,它可以单独打出一个dll出来(热更新就可以依据这个dll做独立功能或分项目)。

Unity 热更新 之 huatuo(HybridCLR)

         step6b:构建一下dll  ----> 发布热更新的时候就要可以使用这里的dll

                使用huatuo的功能,菜单栏HybridCLR--->CompileDll ---> ActiveBuildTarge

                Unity 热更新 之 huatuo(HybridCLR)

                 静等几秒,构建完成后,会有提示Finish!

                 目前的版本目录是放在跟Assets同级的HybridCLR目录里,具体如下:

Unity 热更新 之 huatuo(HybridCLR)

 Unity 热更新 之 huatuo(HybridCLR)

         step6c:热更.dll + 游戏资源 ---->  热更资源.dll 二进制资源  ---> 将这些资源打包(ab包,addressbale等)

                        打ab包,根据项目不同,按照项目的设计即可。 --->打出ab包

         step6d:打出的ab包放在了StreammingAssets目录下,然后根据实际需要,放到服务器上。

到此就做到了热更新。

到此示例项目就算运行起来了。

Unity 热更新 之 huatuo(HybridCLR)

五、huatuo热更新关键源码分析

        5.1 打包.dll  ---->分项目分功能打包dll   

        5.2 打包ab包  ----> 将资源打包成ab包

        5.3 Editor扩展

        5.4 如果启动热更新逻辑:

                1.LoadDll (装载dll),这些dll就是代码逻辑热更新的关键

Unity 热更新 之 huatuo(HybridCLR)

在这里的逻辑可以根据实际情况做调整,比如,在这里装载时,可以先判断下本地和服务器的dll是否不一致(是否需要跟新),如果不需要,就可以直接使用AOT里的,否则更新加载即可。(这里的逻辑时直接更新了,没有判断是否一致)文章来源地址https://www.toymoban.com/news/detail-496858.html

到了这里,关于Unity 热更新 之 huatuo(HybridCLR)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一句话画出动漫效果

     链接: AI Comic Factory - a Hugging Face Space by jbilcke-hf Discover amazing ML apps made by the community https://huggingface.co/spaces/jbilcke-hf/ai-comic-factory 选择类型: Japanese  输入提示词: 效果如下:

    2024年02月10日
    浏览(58)
  • 蚁剑连接一句话木马演示

    需要准备 一台虚拟机作为服务器,一台作为攻击机(可用主机),将虚拟机的网络都设置为桥接。 我这里服务器用win2008R2系统 攻击机用win10 接下来我会演示 php 的一句话木马 其他脚本语言的一句话木马使用过程和这个差别不大 在服务器上安装phpstudy 快速搭建服务器 安装成

    2024年02月14日
    浏览(49)
  • 一句话解释什么是出口IP

    出口 IP 是指从本地网络连接到公共互联网时所使用的 IP 地址。这个 IP 地址是由 Internet 服务提供商(ISP)分配给你的,它可以用来标识你的网络流量的来源。如果你使用的是 NAT(网络地址转换)技术,则在 NAT 设备内部会进行地址转换,使得多个设备可以共享同一个公共 I

    2024年02月08日
    浏览(42)
  • java安全——jsp一句话木马

    提示:以下是本篇文章正文内容,下面案例可供参考 http://localhost:8003/index.jsp?cmd=whoami 不会回显执行的结果只能在后台打印一个地址,常用来反弹shell 代码如下(示例):

    2024年02月11日
    浏览(48)
  • 文件上传漏洞—一句话图片马制作

    提要 :在文件上传漏洞中,通常需要上传脚本类型的文件至服务端执行,获取WebShell,但是网站会严格过滤脚本类型的文件,这个时候便可以通过图片马来尝试突破。 简介 :在图片格式文件(JPG,PNG和GIF等)中添加隐藏一句话木马,利用文件包含漏洞,Web容器解析漏洞和.

    2024年02月07日
    浏览(52)
  • 解封ChatGPT我只用了一句话

    文章前言 ChatGPT作为一个AI语言模型可以帮助使用者生成各种各样的文字内容,目前已被广泛应用于各种语言任务中,例如:文本生成、机器翻译、问答系统等,基于保障使用者权益和维护良好的价值观,官方限制ChatGPT不能回答不当言论(攻击或侮辱性)、敏感内容和带有偏见的

    2024年02月16日
    浏览(39)
  • 渗透干货|史上最全一句话木马

    PHP //可执行命令一句话 普通一句话 PHP系列 过狗一句话 【----帮助网安学习,以下所有学习资料文末免费领!----】 几个变性的php–过防火墙 过狗效果都不错: 密码-7 phpv9 高版本拿shell ASP asp 一句话 ASP过安全狗一句话 ASPX系列 ASPX一句话的 过安全狗效果不怎么样 不过我认为能

    2024年04月25日
    浏览(45)
  • 一句话介绍大数据各种名词及其特点

    大数据 :传统PC无法处理的。数据大、数据类型繁多、处理速度快、价值密度低。 Hadoop :能够对大数据进行分布式处理的软件框架、这种处理具有高效、可靠、可伸缩的特点。Hadoop的特点:高效率、高可靠、高容错、高可拓展。成本低、Linux运行支持多语言。 SSH :建立在应用

    2024年02月03日
    浏览(39)
  • 一句话木马攻击复现:揭示黑客入侵的实战过程

    这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。 准备环境 OWASP虚拟机 xfp 7与xshell 7 ​  DVWA系统默认的账号密码均为:admin/admin  ​ 攻击payload 这个命令的目的是在服务器上创建一个名为 shell.php 的文件,其中包含 PHP 代码。让我们逐步分析该命令:

    2024年02月11日
    浏览(54)
  • AI PPT 一句话搞定PPT讲演搞

    相信大家在职场中,一定会接触过写PPT,经常会把你搞得焦头烂额。在大部分的公司里,写PPT汇报又是不可能逃避的事情。但随着AI时代的到来,有很多AI帮你写PPT的工具也逐渐崭露头角,可以自动帮助你制作出华丽的PPT,给你的职场生活带来极大的便利。这些AI写PPT工具可以

    2024年02月13日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包