HybridCLR 最佳实践,老项目集成c#热更
文本介绍了老项目使用HybridCLR 集成热更的过程
从项目结构调整,代码调整,打包,热更测试,跑完HybridCLR所有流程
源码及资料领取方式私信:领取资料:HybridCLR战棋热更源码
视频讲解稿

先看效果(安卓)




文本介绍了老项目集成HybridCLR ,目的:实现C#代码热更
从项目结构调整,代码写法差异,打包工程,热更部署,讲解HybridCLR全流程
采用战棋框架作为讲解素材
因为它包含了商业游戏的常见业务,比如(战斗,技能,AI,UI,资源管理,A星寻路系统等常用功能)
项目功能越复杂,集成的过程更有参考意义
了解AOT和热更代码
根据需求变化频率业务可分为2个部分
变化频率低的通用业务
变化频率高的游戏业务
(热更代码)游戏玩法逻辑,所属目录(HotUpdate)
战斗,技能,UI,AI,流程控制。
(AOT代码无需热更)通用模块,所属目录(ThirdParty)
资源管理和更新(JAssetBundleMgr)
负责资源的对比更新,下载,断点续传。资源加载,资源加密
A星寻路库(AStarPathFinding)
负责游戏路径的计算(移动路径,技能范围计算等)
对象池管理库(PathologicalGames)
基本可以认为这些模块是不会改动的,是稳定的
也可以理解为HybridCLR提及的AOT代码

资源更新对比实现,需要放在AOT

项目工程结构

入口
文件对比更新完毕后的回调,在这里加载热更代码的dll文件
之前用的是ILRUNTIME,这个版本使用hybridclr
原有的热更代码作为保留参考和对比


由Enrty.Start(),添加游戏组件GameRoot,由它初始化游戏
(在官方demo里多加了一行代码完成游戏吃初始化)

部分代码差异
集成了hybridCLR之后改后改回unity3d内置的API写法

部分代码差异->部分代码差异

设置预制体脚本
支持挂载组件

集成中遇到哪些问题处理的时间花了比较长?
第三方插件,比如,A*插件
因为第三方插件不需要热更,所以放在了AOT
因为热更代码是不能包含编辑器代码的
所以要分离Editor和运行时的代码
打包代码得到错误



热更代码丢失AOT引用


热更程序集缺少引用,因为项目使用了A*插件,并且划分在了AOT程序内,所以热更程序集需要声明引用了第三方的程序集

热更程序集引用三方类库

打包
代码打包



资源打包(资源打包和设计方案详见第二季内容)


得到完整资源(代码资源,素材资源,文件清单表)


打包APK即可
热更流程
填写资源服IP

方式一键热更部署方式

方式二:按如下方式操作
修改代码,生成热更dll

覆盖版本库里的文件


拷贝到资源服务器即可
一键部署热更原理:

演示热更视频