Unity资源热更及代码热更_第二章
manifest是对应文件依赖的配置文件; 完成打包之后,在m_BunleTargetPath这个打包文件夹下,是不需要.manifest文件依赖相关的可视化表信息; 调用DeleteMainfest函数接口,通过文件后缀,完成删除即可;
AB包,对应的加解密,对应的是AES加密算法相关,这里的字符密钥,设定的是"Ocean"
调用的加密算法,内部逻辑,函数接口,包括加解密
FormatMD5函数接口,是把字节数组,通过Tostring函数接口,完成字符串的转化
基于文件流Stream,使用BuildFileMd5函数接口,调用内置的ComputeHash接口,计算哈希值对应的,字节数组,然后再调用,FormatMD5函数接口,完成字符串的转换即可
WriteABMD5函数接口,是从打包的AssetBundle对应文件夹目录下,提取对应打包出来的ab包; 遍历,除了meta和manifest俩后缀生成文件,通过BuildFileMd5函数接口,配合文件的FullName完整路径,提取到文件的md5码,最终加到,ABMD5数据体的,ABMD5List字段容器中; 然后,通过内置的File.Copy文件复制接口,把存储当前版本的ab包,md5码列表的.byte文件,存放到,Version版本,对应的文件夹路径下;
对应文件位置:
后续,如果有资源修改,或者资源新增,就需要打补丁包; 然后从服务器,下载新的ab包,再进入游戏,完成游戏资源的热更新; 可序列化Patch补丁包类,包含命名、url链接、platform平台、对应的md5码,文件大小size; 都加上xml的属性标签XmlAttribute;
m_PackedMd5字典容器,存储的是,当前游戏读出来的,md5码信息
ReadMd5Com函数接口,先读取当前游戏,对应ab包的md5相关信息,加到m_PackedMd5容器中; 然后,弄一个changeList列表容器,用于存放,变更或者新增的,ab文件列表,遍历,m_BunleTargetPath文件夹下,所有的ab文件,通过BuildFileMd5函数接口,提取到它们对应的md5码; 如果m_PackedMd5容器没包含它,就说明是新增的ab文件,加到changeList即可;
继续,如果m_PackedMd5容器是包含这个MD5相关数据体,那就再对比其中的,Md5字段,判断资源有没修改,如果不等,说明是修改过的ab文件,也加到changeList即可; 再把changeList修改列表,和热更号hotCount,作为传参,调用CopyABAndGeneratXml函数接口,完成热更包的相关构建,后续解析;
热更包的路径,是Asset上级目录,再找到Hot的文件夹 → 对应的平台路径
测试项目的机制上,在打热更包的时候,会先删除旧的,弄一个DeleteAllFile函数接口,调用IO内置的对应File相关接口,完成全部文件的删除即可
生成,服务器会用到的,热更包,使用的是,CopyABAndGeneratXml函数接口; 其中传参是,上述解析的,changeList修改的ab包列表,还有热更版本号hotCount; 先调用DeleteAllFile函数接口,完成热更包文件夹内,所有文件的删除; 再遍历changeList修改列表,调用内置的Copy复制拷贝接口,完成修改的ab包拷贝即可
继续,遍历热更文件夹,开始构建,补丁包相关的Patch数据结构,命名、md5码、补丁包url链接等; 其中,rul链接字段,是根据项目的打包配置,包含的bundleVersion字段,和热更版本号,完成的构建; 最后,再调用Xmlserialize函数接口,生成对应的补丁包xml文件即可;
bundleVersion对应的,当前配置是0.1
类转化成xml的Xmlserialize函数接口,也是调用,内置的序列化相关逻辑即可
后面会生成的热更包实例,如图所示: