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

153 lines
5.1 KiB
Markdown
Raw Permalink Normal View History

2025-03-26 00:02:56 +08:00
热更的介绍
![[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]]