HybridCLR 最佳实践,老项目集成热更(战棋项目)

文本介绍了老项目使用HybridCLR 集成热更的过程
从项目结构调整,代码调整,打包,热更测试,跑完HybridCLR所有流程
先看效果(安卓)
源码及资料领取方式私信:领取资料:HybridCLR战棋热更源码
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第1张图片
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第2张图片

HybridCLR 最佳实践,老项目集成热更(战棋项目)_第3张图片

HybridCLR 最佳实践,老项目集成热更(战棋项目)_第4张图片

采用战棋框架作为讲解素材
因为它包含了商业游戏的常见业务,比如(战斗,技能,AI,UI,资源管理,A星寻路系统等常用功能)

项目功能越复杂,集成的过程更有参考意义

了解AOT和热更代码

根据业务需求变化频率,一般可分为2个部分
变化频率低的通用业务
变化频率高的游戏业务

热更业务,所属目录(HotUpdate)
战斗,技能,UI,AI,流程控制。

通用业务(AOT),所属目录(ThirdParty)
资源管理模块(JAssetBundleMgr),负责资源的加载和下载更新,加解密(具体可以查阅往期的视频)
A星寻路库(AStarPathFinding),负责游戏路径的计算
对象池管理库(PathologicalGames)

基本可以认为这些模块是不会改动的,是稳定的
也可以理解为HybridCLR提及的AOT代码

资源更新对比实现,需要放在AOT
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第5张图片

项目工程结构
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第6张图片

入口

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

HybridCLR 最佳实践,老项目集成热更(战棋项目)_第7张图片
由Enrty.Start(),添加游戏组件GameRoot,由它初始化游戏
(在官方demo里多加了一行代码完成游戏吃初始化)
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第8张图片

部分代码差异

集成了hybridCLR之后改后改回unity3d内置的API写法

订阅开始按钮点击事件
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第9张图片

部分代码差异->部分代码差异
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第10张图片
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第11张图片
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第12张图片
设置预制体脚本
支持挂载组件
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第13张图片

集成中遇到哪些问题处理的时间花了比较长?

第三方插件,比如,A*插件
因为第三方插件不需要热更,所以放在了AOT
因为热更代码是不能包含编辑器代码的
所以要分离Editor和运行时的代码

整理AOT目录和热更目录

这里的方法是把所有第三方工具放到同一目录,分离EDITOR代码到其他目录
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第14张图片

HybridCLR 最佳实践,老项目集成热更(战棋项目)_第15张图片

热更代码丢失AOT引用


HybridCLR 最佳实践,老项目集成热更(战棋项目)_第16张图片
热更程序集引用三方类库
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第17张图片
热更程序集缺少引用,因为项目使用了A*插件,并且划分在了AOT程序内,所以热更程序集需要声明引用了第三方的程序集
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第18张图片

打包流程

HybridCLR 最佳实践,老项目集成热更(战棋项目)_第19张图片
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第20张图片
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第21张图片

打包即可

热更流程

修改代码,生成热更dll
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第22张图片
覆盖版本库里的文件
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第23张图片
HybridCLR 最佳实践,老项目集成热更(战棋项目)_第24张图片
拷贝到资源服务器即可
填写资源服IP

HybridCLR 最佳实践,老项目集成热更(战棋项目)_第25张图片

你可能感兴趣的:(Unity3d游戏开发干货,unity,HybridCLR)