obsidian/笔记文件/2.笔记/Unity资源热更及代码热更_第四章.md
2025-03-26 00:02:56 +08:00

168 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

生成了对应的热更文件后,需要从服务器,下载新版,热更文件,在进入游戏的时候,完成替换、加载即可;
参考[[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]]