obsidian/笔记文件/2.笔记/Unity资源热更及代码热更_第四章.md

168 lines
5.3 KiB
Markdown
Raw Permalink Normal View History

2025-03-26 00:02:56 +08:00
生成了对应的热更文件后,需要从服务器,下载新版,热更文件,在进入游戏的时候,完成替换、加载即可;
参考[[Apache服务器配置和使用]]
对应服务器配置文件自定义的数据结构是由版本Version和Patches补丁包数组构成
![[Pasted image 20240422143053.png]]
热更包内对应的Patch.xml补丁包配置文件逻辑结构
![[Pasted image 20240422143323.png]]
服务器的配置文件ServerInfo.xml所在路径
![[Pasted image 20240422143359.png]]
前后的xml结构是保持一致的其中Pathces Version对应的就是热更版本号而Des字段就是对应该热更的描述信息
![[Pasted image 20240422143446.png]]
patch补丁中间包裹着的字段直接从Patch.xml补丁包的配置文件复制粘贴过来即可
![[Pasted image 20240422143636.png]]
从热更包再复制粘贴对应改动的ab包到对应的路径
![[Pasted image 20240422143736.png]]
确认Apache服务器的bin文件夹存在可执行文件httpd.exe
![[Pasted image 20240422143821.png]]
按住Shift右键点击、打开
![[Pasted image 20240422143906.png]]
执行指令,开启服务器
``` shell
.\httpd.exe
```
![[Pasted image 20240422144009.png]]
输入`localhost`,测试,服务器正常开启,出现这界面,即可
![[Pasted image 20240422144031.png]]
![[Pasted image 20240422144101.png]]
下载路径PC、安卓、ios等不同平台会有所不同参考[[【Unity】数据持久化路径Application.persistentDataPath]]
设定上ab包下载存到persistentDataPath路径下的Download文件夹即可
还有俩xml配置文件存放到persistentDataPath根目录
![[Pasted image 20240422144346.png]]
在热更ui界面的Awake函数注释直接开始的逻辑调用HotFix的函数接口开始调用热更相关
![[Pasted image 20240422152722.png]]
网络正常的情况下会调用CheckVersion函数接口检查和对比服务器与本地版本信息
![[Pasted image 20240422152858.png]]
CommonConfirm预制体是提示热更相关的
![[Pasted image 20240422153005.png]]
ReadVersion函数接口是读取之前打基础包的Version版本信息
![[Pasted image 20240422153131.png]]
![[Pasted image 20240422153159.png]]
![[Pasted image 20240422153208.png]]
也是项目内,打包相关的,配置信息
![[Pasted image 20240422153307.png]]
对应的是SaveVersion函数接口和打包调用
![[Pasted image 20240422153517.png]]
![[Pasted image 20240422153553.png]]
读取对应服务器地址的xml文件网络正常的情况下XmlDeserialize解序列化得到对应的ServerInfo 服务器相关配置信息
![[Pasted image 20240422153702.png]]
获取到服务器的ab文件对应的md5码和本地的进行对比如果不等或者本地不存在该ab文件说明是修改的资源或者新增的资源
分别加到几个下载相关的数据容器m_DownLoadList、m_DownLoadDic、m_DownLoadMD5Dic即可
![[Pasted image 20240422153902.png]]
回顾一下传参是判断bool布尔的Action回调委托hotCallBack
![[Pasted image 20240422154028.png]]
如果回调不为空bool的传参就是下载列表是否大于0
![[Pasted image 20240422154114.png]]
回到hotfix界面这个bool传参如果为true也就是有等待下载的ab文件就会调用OpenCommonConfirm函数接口打开“确认下载界面”
![[Pasted image 20240422154231.png]]
调用的就是CommonConfirm这个预制体
![[Pasted image 20240422154341.png]]
![[Pasted image 20240422153005.png]]
包体大小也是直接调用Sum函数接口计算size总数即可
![[Pasted image 20240422154434.png]]
运行游戏,正常
![[Pasted image 20240422154515.png]]
完成下载后,进入游戏,加载的,就会是,热更包修改之后的,图片了
![[Pasted image 20240422154532.png]]
可以看到也是下载到persistentDataPath可持久化路径设定好的DownLoad文件夹了
![[Pasted image 20240422154631.png]]
后续再进入游戏也都是加载热更之后的ab
因为每次都会调用GetHotAB函数接口往m_HotFixDic热更的字典容器添加对应的Patch补丁信息
打断点可知确实就是对应修改的俩ab包
![[Pasted image 20240422154754.png]]
![[Pasted image 20240422155013.png]]
资源加载会调用ComputeABPath函数接口从m_HotFixDic字典容器中拿到对应的补丁包完成热更资源的替换
![[Pasted image 20240422155109.png]]
打断点重新进入游戏是通过AssetBundleManager管理器的LoadAssetBundle函数接口完成ab包的替换、调用
![[Pasted image 20240422155244.png]]
关了服务器,测试一下,网络异常的逻辑判断
![[Pasted image 20240422155438.png]]
检查版本的时候,存在,服务器列表获取,错误回调
![[Pasted image 20240422155654.png]]
注册绑定
![[Pasted image 20240422155737.png]]
![[Pasted image 20240422155752.png]]
运行游戏,网络异常,逻辑正常
![[Pasted image 20240422155807.png]]
修改一下逻辑改回加载本地ab
![[Pasted image 20240422155846.png]]
重新运行游戏不连服务器加载本地ab表现正常
![[Pasted image 20240422155935.png]]