Unity 增量打包AssetBundle

背景

  • 打包太慢了,想要没改动的资源不重新打包浪费时间。

来源

  • 官方文章:https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/

  • 官网AB介绍:https://learn.unity.com/tutorial/assets-resources-and-assetbundles

  • Unity源码部分:BuildAssetBundle.cpp


.manifest文件

在这里插入图片描述

增量打包主要流程

  1. 基于当前输入的打包信息,计算Hash值

  2. 如果之前存在.manifest文件,就对比AssetFileHashTypeTreeHash,如果都一致,则不需要重新打AB。

    • ForceRebuildAssetBundle 可以强制重打所有AB

    • 或者直接删掉对应.manifest来针对性重打AB

  3. 重打的AB会重新创建.manifest文件,反之跳过的AB不会刷新AB和.manifest文件。

Hash的计算内容

AssetFileHash

  • 构建平台

  • 包含的资源、meta文件信息

  • 依赖的AB的名字(不包含绝对路径)

  • 网格配置

  • 打包配置

  • 场景光照配置

  • Shader平台、图形API

TypeTreeHash

  • 类名

  • 命名空间

  • 程序集

源码部分

BuildAssetBundle.cpp

  • CRC:实际打出来AB压缩包的校验码

    • BuildAssetBundleArchiveFile
  • CalculateAssetBundlesToBeBuilt

    • AssetBundleHashesEqual

      • AssetFileHash:平台、meta文件、依赖资源、shader管线等

        • BuildAssetBundle.AssetBundleHashesEqual
      • TypeTreeHash:代码名称、命名空间、程序集等,相同类型但不同顺序也会影响md4计算

  • WriteAssetBundleManifestFile:只有打的ab才会重写manifest,跳过的AB不会刷新

    • Dependencies:outputPath + ABName

不同机器或路径产生差异可能性

  1. 官方表示:https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/#:~:text=Finally%2C%20you%20mention,script%20or%20package.

    • 可能是脚本处理不确定性内容导致差异,可以使用UnityDataTools来打包,用Visual Diff工具对比差异。
  2. 换行符(LF、CRLF)会导致MD4\MD5计算有差异,git可以设置默认两种不同换行,导致不同工程同个文件会产生差异。
    在这里插入图片描述

  3. 可能依赖了绝对路径做一些计算。
    在这里插入图片描述

  4. 不同机器可能收集依赖代码程序集顺序有差异。比如下图同个.manifest文件,在不同机器上,依赖的类是一样的,但顺序不一致,导致计算TypeTreeHash的MD4不一致。
    在这里插入图片描述


测试耗时

  • 在机器只打一个包的环境下,30193个ab,刷新两次增量缓存,第二次打AB时间只要近两分钟。
    在这里插入图片描述

  • 可以通过全局搜索日志文本Bundle Name:,来观察这次打了哪些AB:

在这里插入图片描述


其他

使用BuildReport工具

  • https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/#:~:text=%C2%A0%20%C2%A0%20public%20void-,DetectBuildResults,-()

  • 可以统计打包过程耗时,每个ab耗时等

多个unity进程打AB

  • https://github.com/jiangzhhhh/Unity-MultiProcess-BuildPipeline

SBP 的增量

  • https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@2.1/manual/UpgradeGuide.html#:~:text=Incremental%20Building

  • 看BuildCache.cs

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值