使用 AssetBundles 打补丁就像下载一个新的 AssetBundle 并替换现有的 AssetBundle 一样简单。如果使用 UnityWebRequestAssetBundle.GetAssetBundle 来管理应用程序的缓存 AssetBundles,传递不同的版本或哈希参数将触发对新 AssetBundles 的下载。
补丁系统中最难解决的问题是检测需要替换哪些 AssetBundles。补丁系统需要两个信息列表
补丁程序应下载服务器端 AssetBundles 的列表,并比较 AssetBundle 列表。应重新下载缺少的 AssetBundles 或版本信息已更改的 AssetBundles。
Unity 不提供任何用于差异化补丁的内置机制,并且 UnityWebRequestAssetBundle.GetAssetBundle
在使用内置缓存系统时不会执行差异化补丁。相反,它总是完全下载新的 AssetBundle 文件。如果需要差异化补丁,则必须编写自定义下载器。Unity 以确定性方式对 AssetBundles 的数据进行排序,因此重建的 AssetBundle 的文件补丁可能比完整文件小很多。未压缩或基于块的 压缩一种存储数据的机制,可以减少它所需的存储空间。请参阅 纹理压缩、动画压缩、音频压缩、构建压缩。
请参阅 术语表 (LZ4) 将比默认的完整文件压缩 (LZMA) 更好地进行修补。大多数编写自己系统的开发人员选择为他们的 AssetBundle 文件列表使用行业标准数据格式,例如 JSON,并为计算文件内容哈希使用标准 C# 类,例如 MD5。文件内容哈希可以作为 AssetBundle 版本,或者您也可以使用更传统的版本号,如果这些版本号是由您的构建系统生成的。