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

5.1 KiB
Raw Permalink Blame History

热更的介绍

!Pasted image 20240419104123.png

!Pasted image 20240419104149.png

有两个单例Instance模式一个是常规的类一个是mono的类

!Pasted image 20240419145634.png

!Pasted image 20240419145700.png

这是存储预制体和场景常量的Constr逻辑

!Pasted image 20240419145716.png

生成crc校验码这个crc表直接复制copy就可以使用

!Pasted image 20240419145821.png

继续返回字符串校验码crc的是GetCrc32对应的函数接口调用对应的crc校验算法即可

!Pasted image 20240419145848.png

一般是用ab包完成资源热更总的AB包配置创建逻辑存储预制体路径的是m_AllPrefabPath数据容器 还弄了一个FileDirABName的struct结构体用来存储其他类型数据的AB名称和对应路径

!Pasted image 20240419150133.png

点击空白位置就可以创建一个新的ABConfig配置文件

!Pasted image 20240419153952.png

已经创建好的配置文件还有指定的各个需要打ab包的路径

!Pasted image 20240419154042.png

AB包和MD5码相关的逻辑结构后续会写入到xml文件中

!Pasted image 20240419160907.png

这是项目本身的文件路径汇总之前是没有CreateAssetMenu创建入口加上就好分别是ab包其中的文件列表md5、crc校验码相关的配置信息对应的byte字节文件路径 还有xml、其余二进制文件、脚本、protobuf协议对应的路径

!Pasted image 20240419173520.png

对应属性面板的CustomEditor逻辑

!Pasted image 20240419173840.png

最后还有一个GetRealFram函数接口用来获取这个项目配置文件

!Pasted image 20240419173941.png

对应显示

!Pasted image 20240419174027.png

xml文件主要是配置相关的

!Pasted image 20240419174243.png

需要先使用XmlDeserialize函数接口完成xml反序列化Object

!Pasted image 20240419174207.png

再调用BinarySerilize函数接口完成Object类转二进制的操作

!Pasted image 20240419174700.png

XmlToBinary函数接口通过GetAssemblies配合传参name名字找到对应的type调用上述俩逻辑组合完成xml转二进制的相关操作

!Pasted image 20240421124500.png

AllXmlToBinary函数接口是遍历Asset目录下的xml路径调用XmlToBinary的逻辑完成全部xml的批量转换

!Pasted image 20240421124848.png

!Pasted image 20240421124909.png

ContainAllFileAB函数接口配合m_AllFileABab包的路径数据容器完成冗余的数据剔除

!Pasted image 20240421125107.png

设置资源的assetBundleName名称

!Pasted image 20240421125219.png

对应的是,这标签位置

!Pasted image 20240421125256.png

打包的时候会删除无用的Ab包所以需要通过ConatinABName函数接口基于文件名判断是否为有效的ab包其中 字符数组strs 后续的传参,会是GetAllAssetBundleNames函数接口获取所有的ab包名称数组

!Pasted image 20240421125509.png

打包之后存放ab包的文件路径是Application.dataPath上层也就是Asset目录上层的AssetBundle目录 → 对应当前平台的,文件夹下

!Pasted image 20240421130032.png

打包平台是这里选的

!Pasted image 20240421130244.png

目前选中的是PC的windows平台

!Pasted image 20240421130330.png

因此,打包后,存放路径,也是对应

!Pasted image 20240421130404.png

!Pasted image 20240421130413.png

在打包的时候会调用DeleteAB函数接口删掉以上位置无关的ab包

!Pasted image 20240421130442.png

在打包的时候还需要判断文件是否在有效路径内有一个m_ConfigFil的List数据容器用于存储

!Pasted image 20240421130902.png

对应存储的是ABConfig配置文件的这些路径

!Pasted image 20240421131022.png

对应逻辑

!Pasted image 20240421131046.png

是否有效路径的ValidPath函数接口就是在该容器内查找确认元素即可

!Pasted image 20240421131112.png

WriteData函数接口就是开始构建AB包队列的功能逻辑通过ValidPath判断是有效路径后实例化单个ABBase完成Path路径crc校验码等字段的赋值最后再通过内置的GetDependencies函数接口拿到对应它的依赖

!Pasted image 20240421131226.png

继续,遍历,对应它的依赖,字符数组,如果是.cs脚本文件后缀跳过即可 如果abName是等于resPathDic对应Path的说明是依赖自身continue跳过 其他的依赖就加到该ab包的ABDependce字段对应的依赖体容器即可

!Pasted image 20240421131602.png

继续把打包的汇总数据体AssetBundleConfig分别写入xml和byte文件其中byte文件也会打成ab包所以也调用一下SetABName函数接口完成标签设定即可

!Pasted image 20240421132046.png

对应生成的xml和byte文件

!Pasted image 20240421132250.png

!Pasted image 20240421132301.png