您的位置:首页 > 健康 > 美食 > Unity 热更 之 【HybirdCLR】+【YooAsset】 [安卓 Android端] [代码 + 资源热更] 功能的 简单实现演示

Unity 热更 之 【HybirdCLR】+【YooAsset】 [安卓 Android端] [代码 + 资源热更] 功能的 简单实现演示

2024/10/5 17:24:38 来源:https://blog.csdn.net/u014361280/article/details/141963118  浏览:    关键词:Unity 热更 之 【HybirdCLR】+【YooAsset】 [安卓 Android端] [代码 + 资源热更] 功能的 简单实现演示

Unity 热更 之 【HybirdCLR】+【YooAsset】 [安卓 Android端][代码 + 资源热更] 功能的简单实现演示

目录

Unity 热更 之 【HybirdCLR】+【YooAsset】 [安卓 Android端][代码 + 资源热更] 功能的简单实现演示

一、简单介绍

二、 HybridCLR

三、YooAsset

四、HybirdCLR 引入工程

五、YooAsset 引入工程

 六、Python  服务器 简单构建

七、 HybirdCLR 代码 热更部分

八、YooAsset 资源 热更部分

九、构建热更基础环境场景

十、更新预制体,和代码,进行热更


一、简单介绍

Unity热更有很多方案,各种lua热更,ILRuntime等,这里介绍的是YooAsset+HybridCLR的热更方案,HybridCLR负责更新c#代码,YooAsset负责更新资源。

HybridCLR 是一种创新的解决方案,专为 Unity 游戏开发中的热更新需求设计。它通过结合解释执行和 Ahead-of-Time (AOT) 编译技术,为跨平台的游戏开发提供了一种高效的热更新机制。

  • 原生C#热更新体验,开发工作流与传统Unity C#开发几乎相同,零学习和使用成本。
  • C++实现,与il2cpp高级集成,运行性能和内存占用指标都远远优于其他任何热更新方案。开创性的DHE技术让热更新的游戏逻辑的运行性能基本达到原生AOT的水平。
  • 极其稳定可靠,足以满足大中型商业项目的稳定性要求。当前上千个商业游戏项目完成接入,其中有几百款已经双端上线。大多数头部公司如腾讯、网易、字节、funplus都已接入。

YooAsset 是一个专为 Unity 设计的资源管理系统,它提供了一套完整的资源加载和管理解决方案,旨在简化资源的加载流程,提高游戏的性能和用户体验。

  • 不需要复杂的界面配置,专注于中国开发者的使用体验,可以帮助研发团队快速部署和交付游戏。

  • 可以满足商业化游戏的各类需求,十大系统特点助力研发团队提高产品品质。

  • 秉持开源精神,无论是公司或者个人可以永久免费使用。

简单来说,流程就是将c#代码打成dll,然后把dll当做一个资源,用YooAsset热更dll资源之后,动态加载dll程序集,然后执行新逻辑

HybridCLR相比其他代码热更方案而言,纯c#方便开发,更加符合开发者习惯,更新的代码执行效率也更好。

YooAsset热更资源,主要是省去了自己亲自管理ab包,ab包的管理挺繁琐,AssetBundle坑也很多,而且YooAsset有下载器,不用自己手写网络下载,也不用自己记录资源,比对资源列表来判定需要热更什么资源。

二者结合,一个更新代码,一个更新资源,实现整个工程代码资源的热更。

案例环境:

  • win 10
  • Unity 2021.3.16f1
  • Visual Studio 2022
  • HybirdCLR 6.7.1
  • YooAsset 2.1.2

二、 HybridCLR

 HybridCLR是一个特性完整、零成本、高性能、低内存近乎完美的Unity全平台原生c#热更新解决方案。

HybridCLR扩充了il2cpp运行时代码,使它由纯AOT runtime变成AOT+Interpreter 混合runtime,进而原生支持动态加载assembly,从底层彻底支持了热更新。使用HybridCLR技术的游戏不仅能在Android平台,也能在IOS、Consoles、WebGL等所有il2cpp支持的平台上高效运行。

由于HybridCLR对ECMA-335规范 的良好支持以及对Unity开发工作流的高度兼容,Unity项目在接入HybridCLR后,可以几乎无缝地获得C#代码热更新的能力,开发者不需要改变日常开发习惯和要求。HybridCLR首次实现了将Unity平台的全平台代码热更新方案的工程难度降到几乎为零的水平。

特性

  • 近乎完整实现了ECMA-335规范,只有极少量的不支持的特性。
  • 零学习和使用成本。对绝大多数开发者来说写代码近乎没有限制。 热更新代码与AOT代码无缝工作,可以随意写继承、泛型反射之类的代码。不需要额外写任何特殊代码、没有代码生成
  • 完全支持多线程,包含但不限于 volatile、ThreadStatic、async Task等相关功能和特性。这是其他所有热更新方案都不支持的
  • 几乎完全兼容Unity的工作流。包括且不限于支持热更新MonoBehaviour、ScriptableObject、DOTS技术,资源上挂载的热更新脚本可以正确实例化,这是其他所有热更新方案都不支持的
  • 执行高效。实现了一个极其高效的寄存器解释器,所有指标都大幅优于其他热更新方案。性能测试报告
  • 内存高效。 热更新脚本中定义的类跟普通c#类占用一样的内存空间,远优于其他热更新方案。内存占用报告
  • 支持MonoPInvokeCallback,可以与native代码或者其他语言如lua、javascript、python良好交互
  • 支持一些il2cpp不支持的特性,如makeref、 reftype、__refvalue指令
  • 支持独创的 Differential Hybrid Execution(DHE) 差分混合执行技术,即可以对AOT dll任意增删改,会智能地让未改动的函数以AOT方式运行,变化或者新增的函数以interpreter模式运行,让热更新的游戏逻辑的运行性能基本达到原生AOT的水平
  • 支持 热重载 技术,可以100%卸载程序集
  • 支持现代的dll加密技术,有效保障代码安全

支持的版本与平台

  • 支持2019.4.x、2020.3.x、2021.3.x、2022.3.x、2023.2.x、6000.x.y全系列LTS版本
  • 支持所有il2cpp支持的平台
  • 支持团结引擎和鸿蒙平台

工作原理

HybridCLR从mono的 mixed mode execution 技术中得到启发,为unity的il2cpp之类的AOT runtime额外提供了interpreter模块,将它们由纯AOT运行时改造为"AOT + Interpreter"混合运行方式。

更具体地说,HybridCLR做了以下几点工作:

  • 实现了一个高效的元数据(dll)解析库
  • 改造了元数据管理模块,实现了元数据的动态注册
  • 实现了一个IL指令集到自定义的寄存器指令集的compiler
  • 实现了一个高效的寄存器解释器
  • 额外提供大量的instinct函数,提升解释器性能

更多信息,请参看 HybirdCLR 官网:HybridCLR | HybridCLR

三、YooAsset

YooAsset是一套用于Unity3D的资源管理系统,用于帮助研发团队快速部署和交付游戏。

它可以满足商业化游戏的各类需求,并且经历多款百万DAU游戏产品的验证。

YooAsset可以满足以下任何需求:

  • 我想发布一个不包含任何游戏资源的安装包,然后玩家边玩边下载。
  • 我想发布一个可以保证前期体验的安装包,然后玩家自己选择下载关卡内容。
  • 我想发布一个保证300MB以下内容的安装包,然后进入游戏之前把剩余内容下载完毕。
  • 我想发布一个偏单机的游戏安装包,在网络畅通的时候,支持正常更新。在没有网络的时候,支持游玩老版本。
  • 我想发布一个MOD游戏安装包,玩家可以把自己制作的MOD内容上传到服务器,其它玩家可以下载游玩。
  • 我们在制作一个超大体量的项目,有上百GB的资源内容,每次构建都花费大量时间,是否可以分工程构建?

系统特点

  • 可扩展文件系统

    完美支持微信小游戏和抖音小游戏等特殊平台。支持接入虚拟文件系统,支持自定义各类需求。

  • 构建管线无缝切换

    支持传统的内置构建管线,也支持可编程构建管线(SBP)。

  • 支持分布式构建

    支持分工程构建,支持工程里分内容构建,很方便支持游戏模组(MOD)。

  • 支持可寻址资源定位

    默认支持完整路径的资源定位,也支持可寻址资源定位,不需要繁琐的过程即可高效的配置寻址路径。

  • 安全高效的分包方案

    基于资源标签的分包方案,自动对依赖资源包进行分类,避免人工维护成本。可以非常方便的实现零资源安装包,或者全量资源安装包。

  • 强大灵活的打包系统

    可以自定义打包策略,自动分析依赖实现资源零冗余,基于资源对象的资源包依赖管理方案,天然的避免了资源包之间循环依赖的问题。

  • 基于引用计数方案

    基于引用计数的管理方案,可以帮助我们实现安全的资源卸载策略,更好的对内存管理,避免资源对象冗余。还有强大的分析器可帮助发现潜在的资源泄漏问题。

  • 多种模式自由切换

    编辑器模拟模式,单机运行模式,联机运行模式,Web运行模式。在编辑器模拟模式下,可以不构建资源包来模拟真实环境,在不修改任何代码的情况下,可以自由切换到其它模式。

  • 强大安全的加载系统

    • 异步加载 支持协程,Task,委托等多种异步加载方式。
    • 同步加载 支持同步加载和异步加载混合使用。
    • 边玩边下载 在加载资源对象的时候,如果资源对象依赖的资源包在本地不存在,会自动从服务器下载到本地,然后再加载资源对象。
    • 多线程下载 支持断点续传,自动验证下载文件,自动修复损坏文件。
    • 多功能下载器 可以按照资源分类标签创建下载器,也可以按照资源对象创建下载器。可以设置同时下载文件数的限制,设置下载失败重试次数,设置下载超时判定时间。多个下载器同时下载不用担心文件重复下载问题,下载器还提供了下载进度以及下载失败等常用接口。
  • 原生格式文件管理

    支持原生文件构建关系,可以很方便的实现原生文件的版本管理和下载。

  • 灵活多变的版本管理

    支持线上版本快速回退,支持区分审核版本,测试版本,线上版本,支持灰度更新及测试。

更多信息,请参看 YooAsset 官网:https://www.yooasset.com/

四、HybirdCLR 引入工程

Unity 环境要求:

  • 安装 2019.4.40、2020.3.26+、 2021.3.0+、2022.3.0+ 中任一版本
  • 根据你所用的操作系统,安装过程中选择模块时,必须选中 Windows Build Support(IL2CPP)Mac Build Support(IL2CPP)
  • visual studio 2019或更高版本。安装时至少要包含使用Unity的游戏开发和使用c++的游戏开发组件。

1、打开 Unity 新建一个空工程

2、打开菜单栏, Window - Package Manager

3、在 Package Manager  界面,选择 Add package from git URL ... 添加下面url 地址即可

这里填入:https://gitee.com/focus-creative-games/hybridclr_unity.git

Gitee 地址:hybridclr_unity: HybridCLR package for unity

Github 地址:GitHub - focus-creative-games/hybridclr_unity: Unity package for HybridCLR

4、记得把 Project Settings 中的 Player 中 Scripting Backend 改为 IL2CPP

5、平台切换成 Android 平台

五、YooAsset 引入工程

1、在菜单栏,找到 Edit-Project Settings... ,点击打开

2、在 Project Settings 找到 Package Manager ,选中它,添加YooAsset 相关信息

(国际版)
Name: package.openupm.com
URL: https://package.openupm.com
Scope(s): com.tuyoogame.yooasset

对应填入上面的信息,save ,会简单运行,没有报错即可

(中国版)
Name: package.openupm.cn
URL: https://package.openupm.cn
Scope(s): com.tuyoogame.yooasset
(之前有个中国版配置,不过这个配置好像会报错了,请先试用上面国际版的地址)

3、在菜单栏找到,Window-Package Manager

4、在 Package Manager 界面,找到 Packages: My Registers,选择它,就可以看到刚才配置 YooAsset ,点击 Install 安装即可

(这里是更为2.1.2)

5、在工程中创建一个Resources 文件夹,鼠标右键 Create-YooAsset-Create YooAsset Setting

参数默认就好

 六、Python  服务器 简单构建

1、在 python 官网下载 python
寻找需要的版本下载即可

python 官网:Download Python | Python.org

2、双击安装即可,注意添加路径到 PATH 环境中


3、创建一个文件夹,作为本地服务器根文件夹


4、进入本地服务器根文件夹下,按住 shift + 鼠标右键,在此处打开 Powershell 窗口


5、输入 python -m http.server 7070,启动 7070 端口作为服务器端口
其中 端口 7070 根据需要设定即可


6、在本地服务器根文件下创建一个 index.html,里面的内容是 This Home Page



7、在浏览器上输入 127.0.0.1:7070 ,效果如下
说明本地服务器,启动成功


8、在 cmd 中输入 ipconfig 可以查看本机的局域网地址


9、以其中一个作为本地服务器IP地址,输入 192.168.1.120:7070 也是可以访问的,效果如下

10、至此,Python 简单的本地服务器搭建完成

七、 HybirdCLR 代码 热更部分

1、在工程中,创建一个脚本 HotUpdate ,在创建一个 ,作为代码热更的程序集

2、在 HotUpdate 文件夹下创建一个 Test 脚本,简单编写代码

3、打开菜单栏 HybirdCLR - Installer...,在界面上 Insall ,等待编译成功即可

4、打开菜单栏 HybirdCLR - Settings...,在界面上 添加上之前创建的 HotUpdate 程序集

5、打开菜单栏 HybridCLR-Generate-All,编译生成程序集

6、在 xxxxx、HybridCLRData/HotUpdateDlls/Android文件夹下可以看到 HotUpdate.dll

八、YooAsset 资源 热更部分

1、在工程中,创建文件夹 PackageAsset,管理打包资源,分别创建 Codes 和 Prefabs 管理代码程序集和预制体资源

2、在场景中创建一个 Cube ,挂载上 Test  脚本

3、把 Cube 作为预制体,删除场景中的 Cube

4、把 HotUpdate.dll 添加后缀为 HotUpdate.dll.bytes 添加到 PackageAsset/Codes文件夹下

补充元数据的dll:将HybridCLRData/AssembliesPostIl2CppStrip/Android 目录下的mscorlib.dll, System.dll, System.Core.dll这三个dll复制到Assets/MyAssset/Codes内,并且加上后缀.bytes

5、打开 YooAsset-AssetBundle Collector

6、如下操作,显示出 pacakges 栏

7、点击创建组群,然后创建组,如下图

8、创建 code(代码)和 prefab (预制体) 组

9、注意勾选Enable Addressable ,然后注意 save 保存

九、构建热更基础环境场景

1、在工程中,添加脚本 Scripts 管理不用热更的脚本

2、添加一个脚本,加载 YooAsset 热更资源,以及加载 HybirdCLR 的 dll 资源

3、脚本注意更新你的 本地服务器地址

4、把 LoadPackageAssetAndDll 脚本挂载到场景中

5、添加 ConsoleToScreen 脚本,可以把日志显示在屏幕上,也挂载到 物体上

6、此时 Scripts文件夹如下

7、打开 YooAsset - Builder ,点击 Click Build ,等待构建完成即可

8、构建完成后,对应打开文件夹,构建生成如下

9、把 2024-09-06-1114 文件夹下的内容全部拷贝到 本地服务器中 HotUpdateProject/Android文件夹下

(HotUpdateProject/Android是代码中的决定的)

10、打包 SampleScene 场景为 apk

11、安装真机 ,运行apk

十、更新预制体,和代码,进行热更

1、更新 Cube 预制体,放回原点,其次 Y 拉长

2、修改 Test .cs 代码打印 为 “Test HybirdCLR v1.0.1”,并保存代码

3、重新生成 HotUpdate.dll 程序集,并更新替换原来 Codes 文件夹下的,注意后缀.bytes

4、重新打开 YooAsset - Builder ,点击 Click Build ,等待构建完成即可

4、把 新生成 文件夹下的内容全部拷贝到 本地服务器中 HotUpdateProject/Android文件夹下

(可以先删除 HotUpdateProject/Android 之前的,再拷贝进去)

5、运行真机上的 apk 应用,预制体更新了,代码也更新了

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com