Unity 热更新 HybridCLR 对接到项目中

Unity版本 2021.3.6f1

HybridCLR版本 2.2.0

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++相关的开发环境安装即可。

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 脚本后端。请考虑将项目构建到空目录中。)

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

 接下来正式开始:

创建一个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会自动重启一下。

 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,稍等片刻,即可导入成功。

 

 2.3安装HybridCLR,插件导入成功后在菜单栏中,会有一个HybridCLR选项。一次选择HybridCLR ---> Installer ,在安装面板中,点击安装即可,等待安装。 

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

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

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

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

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

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

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

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

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

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

Main是示例项目的程序集;

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

BetterStreamingAssets是一个插件,方便在移动端(Android、Ios)可以直接访问StreamingAssets文件下的内容 

 6.设置热更新

6.1设置热更新程序集

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

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

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

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

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

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

7.打包发布(Build)

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

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

 8.测试一下热更新

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

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

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

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

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

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

 到这里,我们没有重新发布工程,就可以更新程序集里逻辑(看到了我们修改后的日志信息),说明我们热更新(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,就可以了。

猜你喜欢

转载自blog.csdn.net/u013774978/article/details/130536339
今日推荐