Unity 热更新 HybridCLR 对接到项目中

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

Unity版本 2021.3.6f1

HybridCLR版本 2.2.0

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

1.首先新建一个Unity项目(空项目)PC平台

1.1要注意两点:

1.Unity 要安装了Windows-IL2CPP 环境的,这个Unity官网有提供,根据自己Unity版本下载对应的环境即可。

2.il2cpp需要c++的环境库,一般情况不是C开发的,很容易缺失c++的开发环境,因此在打包时会出现 error: could not set up a toolchain for architecture x64. make sure you have the right build tools installed for il2cpp builds. details: 类似的跟il2cpp相关的错误,大概率就是c++的环境不满足,通过vs的安装程序,勾选一下c++相关的开发环境安装即可。

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

3.如果是现有项目接入,之前项目是使用mono的后来切换到il2cpp的会报错:error:  Build path contains project built with Mono scripting backend, while current project is using IL2CPP scripting backend. Consider building your project into an empty directory. (错误:生成路径包含使用 Mono 脚本后端生成的项目,而当前项目正在使用 IL2CPP 脚本后端。请考虑将项目构建到空目录中。)

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

是因为你的项目中包含了mono相关的东西,需要重新建一个项目,把环境配置好以后(后面的1.2配置环境),再把你的项目内容,复制到新的项目才可以。

 接下来正式开始:

创建一个Unity项目

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 1.2.修改Unity的几个配置点(配置il2cpp环境)

在PlayerSetting中,Player --> Other Settings 下,

3.1Comfiguration 的 ScriptingBackend 要修改为IL2CPP,

3.2Api Compatibility Level 修改为.NET Framework 

3.3 Use incremental GC (增量GC)去掉勾选

3.4 Script Compilation 的 Allow'unsafe' Code (允许不安全代码)要勾选

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 修改完成以后,Unity会自动重启一下。

 2.导入HybridCLR插件

2.1找到hybridclr_unityhttps://gitee.com/focus-creative-games/hybridclr_unity

        拿到插件的git地址 https://gitee.com/focus-creative-games/hybridclr_unity.git

2.2 在Unity项目中,导入插件;菜单栏Window  ---> Package Manager ,打开该界面后,点击左上角第一加号(+),在下拉表中,选择 Add from git URL ... 点击后,在弹出的框中,粘贴.git地址,然后点击Add,稍等片刻,即可导入成功。

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 2.3安装HybridCLR,插件导入成功后在菜单栏中,会有一个HybridCLR选项。一次选择HybridCLR ---> Installer ,在安装面板中,点击安装即可,等待安装。 Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 安装状态,是已安装就说明已经安装成功了。到这里插件就算导入成功了。

4.下载HybridCLR的教程项目 (示例工程)hybridclr_trialhttps://gitee.com/focus-creative-games/hybridclr_trial

 4.1把项目下载下来(.zip)的,然后在本地找个位置,解压出来。如图有这些东西:

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

4.2 然后打开Package,把里面用的的包拷贝出来,到自己的工程目录下的Package里:

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

4.3然后在打开Assets,把里面用到跟热更新相关的也拷贝出来,到自己的工程Assets目录下 

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 4.4拷贝完成后,回到Unity,等待加载完成,即可;打开Assets-->Scenes-->Main场景

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 5.创建热更新程序集 (Assembly Definition)

5.1 在HotUpdate下,右击创建一个程序集

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

5.2根据设置 勾选 Allow ‘unsafe’ Code 

在Use GUIDs中,选择关联用到的程序集

Main是示例项目的程序集;

HybridCLR.Runtime 是热更新的程序集;

BetterStreamingAssets是一个插件,方便在移动端(Android、Ios)可以直接访问StreamingAssets文件下的内容 Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 6.设置热更新

6.1设置热更新程序集

在Unity菜单栏中,HybridCLR ---> Settings;打开热更新配置,将我们需要热更新用的程序集添加进来;(只有在这里的程序集,才会识别为热更新,而且同时要在代码逻辑中,启动阶段也要把热更新的程序集加载到内存中)

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 在目前这个hybridclr版本中,LoadDll.cs 的 StartGame()函数中,需要把你需要热更新的程序集(.dll)加载一下。否则会在程序调用该程序集中的数据时,会报missing的问题。

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 6.2手动添加补充 aot dlls (Path AOT Assemblies)

这里要添加的补充程序集,在LoadDll中,也有体现:

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 这里不添加的话,会抛错:Exception: resolve 热更新 dll:mscorlib 失败!请确保已经编译了热更新dll或者外部热更新路径中配置了正确的值。更多请参阅常见错误文档

到这里算是接入热更新完成了,打包(Build)一下,出来一个工程运行看下效果吧。

7.打包发布(Build)

 7.1首先HybridCLR --> Build --> BuildAssetsAndCopyToStreamingAssets ,打包一下项目用到的资源和程序集(如果这里失败的话,看下下面第9注意几点,保证这里打包资源成功),这里的东西是后续热更新需要的东西。

7.2然后,按照正常打包流程,发布一个版本出来即可。

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 8.测试一下热更新

第一步,按照以上操作后,这里主要的两个文件 一个LoadDll.cs,一个HotUpdateMain.cs,LoadDll是我们源程序的,打包在工程中的,这里主要注意的就是要把我们创建的程序集(GFHotfix.dll)添加进来

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

第二步,默认情况下看下我们的 HotUpdateMain脚本中的测试输出(看一下记住了,待会会在这里做修改,测试热更新是否生效):

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 打包出来后,直接运行看下日志输出(跟我们代码中的一致):

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 第三步,修改一下HotUpdateMain脚本中的日志输出(添加一行打印,内容随便,自己记得就可以

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 然后在Unity工程中,生成一下项目需要用到的资源和程序集(不明白的可以往上翻翻7打包发布(Build)使用7.1就可以了,不用在重重发布工程),保证这的资源和程序集是最新的。然后将StreamingAssets下的GFHotfix.dll.bytes放到你发布出来的工程对应的StreamingAssets(替换即可),

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

最后再次运行看输出日志:

Unity 热更新 HybridCLR 对接到项目中,Unity应用及扩展,unity,游戏引擎,ar,HybridCLR,Unity热更新

 到这里,我们没有重新发布工程,就可以更新程序集里逻辑(看到了我们修改后的日志信息),说明我们热更新(HybridCLR)成功了。

9.注意几点

1.在HybridCLR示例项目中,Main程序集是源工程,没有加入到热更新里,所以在Mian程序集里的代码逻辑是不能热更新的,这也是一个项目框架设计时要注意的,因为Mian程序集中有LoadDll. cs,在这里处理的热更新程序集的加载,所以这里的变动会直接影响到后续是否要重新打包。

2.HybridCLR ----> Generate 

        LInkXml:   生成LInkxml文件(这里记录了项目中所有用到的基础程序集-(System、UnityEngine、mscorlib等),自己新建的程序集是不在这里的)

        All:   生成(发布)所有的程序集出来,到指定位置(项目中所有程序集的代码逻辑都打包成.dll),程序运行(这里都是项目的业务逻辑)都依赖与他。

3.HybridCLR ----> Build

        BuildAssetsAndCopyToStreamingAssets:    快捷打包,把预制体和程序集(.dll)打包并且复制到Streaming Assets目录下;这里的东西就是作为热更新需要的东西。

4.如果在执行 3(BuildAssetsAndCopyToStreamingAssets)的时候出现错误,可以执行下HybridCLR ----> Generate ---> Linkxml,生成一下Linkxml文件,然后手动发布一下工程(就是打包(Build)一下),成功了以后,在执行一下HybridCLR ----> Generate ---> All,生成一下所有的程序集,最后在执行BuildAssetsAndCopyToStreamingAssets,就可以了。文章来源地址https://www.toymoban.com/news/detail-518181.html

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

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

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

相关文章

  • Unity 热更新基础HybridCLR:Windows平台使用(HybridCLR手记二)

    【注意:官网教程现已完善,请您访问官网进行学习,此教程现已失效,官网版本已更新至4.0以上,感谢您的观看,官网请访问:快速上手 | HybridCLR (code-philosophy.com)】 项目是根据官网的示例工程进行修改的,版本参数如下: unity:2020.3.30(2023.5.29日更新至wolong最新版,经测试依

    2024年02月01日
    浏览(42)
  • 【Unity】热更新HybridCLR学习与实战(一)

    从事unity开发以来一直未真正系统的学习过热更新,现在业务上有需要,借此机会来深入学习一下,调研了几种现有比较火的热更新框架,对比了一下优劣,最终决定使用HybridCLR来做热更新,最终目的是要加入到我们已有的项目中,所以肯定要全面实现商业化,因此有同等需

    2024年02月03日
    浏览(42)
  • Unity最新热更新框架 hybridclr_addressable

    GitHub:YMoonRiver/hybridclr_addressable: 开箱即用的商业游戏框架,集成了主流的开发工具。将主流的GameFramework修改,支持Addressable和AssetBundle,已完善打包工具和流程。 (github.com) # 新增GameFramework Addressables 开箱即用 # 新增循环列表 ### UnityGameFramework   **此框架参考:**    `GameFramework

    2024年02月03日
    浏览(50)
  • Unity | YooAssetV2.1.0 + HybridCLR热更新

    目录 一、项目更改 二、使用YooAsset热更 1.资源配置 2.资源构建 3.将两个文件夹下的资源上传CDN服务器 4.修改代码 5.运行效果         本文记录利用YooAsset+HybridCLR来进行资源和dll的更新。YooAsset使用的是新版V2.1.0。相比于旧版,dll(原生文件)和资源要建两个package分别来进行bu

    2024年02月19日
    浏览(39)
  • Unity转微信小游戏 HybridCLR + YooAsset 实践

    参考链接:https://github.com/wechat-miniprogram/minigame-unity-webgl-transform?tab=readme-ov-file Unity 2021.3.15f1c1 Unity 2021.2.5f1c302 wxSDK HybridCLR 5.0.0 YooAsset 1.5.7 后台配置白名单 微信小游戏注意事项: 不支持同步加载。 不支持资源加密。 不支持多Package 关闭WebGL本地缓存 参考地址 因为微信小游戏

    2024年04月12日
    浏览(110)
  • Unity之如何接入HybridCLR(代号wolong,原huatuo)热更新框架

    HybridCLR(代号wolong)是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案。 官方提供了完整的教程:HybridCLR快速上手 官方还提供了一个简易的小Demo,演示了如何使用HybridCLR实现热更新。hybridclr_trial 官方文档其实已经非常详细了,我写本文目的主要

    2024年02月12日
    浏览(44)
  • 【Unity3D热更新】Unity3D 零成本、高性能的C#的热更新框架:HybridCLR

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 相信只要做过热更新的小伙伴,都被热更新搞过心态吧。 我有一个小伙伴,本来是面向

    2024年01月16日
    浏览(53)
  • Unity游戏开发客户端面经——热更新(初级)

    前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是 热更新 常问问题总结,有帮助的可以收藏。 1.1 为什么使用Lua作为热更新语言,不用C#         热更新本身对于资源热更新是非常容易的,Unit

    2023年04月20日
    浏览(45)
  • 【Unity实战】HybridCLR热更快速集成

    本文假设你已经通过UPM导入了HybridCLR、Addressables、il2cpp支持并具有一定的C#基础和Unity编辑器操作能力。 由于本文主打快速集成,故将Assembly-CSharp划入到热更新DLL。 理论上成熟的项目应该用Assembly Definition进行精细划分以便于管理和缩短编译时间。但是若掌握不好,划分不明白

    2024年02月03日
    浏览(49)
  • Unity3D 游戏服务器怎么实现热更新详解

    Unity3D是一款强大的游戏开发引擎,它不仅可以用于游戏客户端的开发,还可以用于游戏服务器的搭建。在游戏开发过程中,热更新是一项非常重要的功能,它可以使游戏在不重新启动的情况下,更新游戏内容,修复bug,提高游戏体验。本文将详细介绍Unity3D游戏服务器如何实

    2024年01月16日
    浏览(57)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包