Skip to main content
Version: Next

打包资产

在打包资产前,你需要:

  1. 为要打包的资产创建打包配置
  2. 为打包配置创建打包分组
  3. 为要打包的资产添加打包分组
  4. 为打包分组中的资产设置打包模式

打包配置创建好后,使用 xasset>Build Bundles 菜单可以针对选中或所有(不选就是所有)的打包配置中的资产进行打包。

另外,当打包配置中的资产没有新增或修改依赖关系时,也可以使用 xasset>Build Bundles with Cache 菜单读取历史打包缓存更快的打包数据。可以参考的数据是,在 40000 左右个参与打包的资产的项目中,使用历史缓存数据打包资产能节约 5 分钟左右的资产数据采集和资产依赖分析优化分组时间。

默认,默认打包资产后的文件会输出到输出目录中的以下几个文件夹中,了解更多请参考输出目录的相关说明。

  • Bundles
  • BundlesCache
  • PlayerAssets

需要注意的是:

  1. 和社区版不同,专业版会自动对 Bundles 中的资产进行加密处理,如果想用 AssetStudio 之类的工具查看打包后的 bundle 文件的内容,专业版用户可以打开 BundlesCache 目录的文件查看。
  2. 打包后,请谨慎删除 Bundles 和 Bundles Cache 的数据,这可能会破坏构建管线的增量打包机制,例如文件没有修改,打包后也发生变化,以及需要更长的打包时间。

阅读打包资产的常见问题,可以了解打包资产相关的热点问题及其解答或建议。

为要打包的资产创建打包配置

在 Unity 编辑器中,选择使用 Assets>Create>xasset>Build 菜单可以创建打包配置。

此外,专业版可以使用打包工具顶部工具栏中的下拉列表的 Create New Build... 菜单创建打包配置。

create-build.png

为了方便快速定位打包配置的位置,创建后的打包配置建议放到这个目录。

  • Assets/xasset/Config/Builds

阅读打包配置的说明,可以了解打包配置的使用。

为打包配置创建打包分组

在 Unity 编辑器中,使用打包配置的 Inspector 窗口,可以为打包配置创建打包分组。

在打包配置中添加打包分组后,可以用 xasset>Generate Group Assets Menu Items 菜单生成为资产设置打包分组的 Assets 菜单,以便于后续完成为要打包的资产添加打包分组的操作。

阅读打包分组的说明,可以了解打包分组的用途。

为要打包的资产添加打包分组

在 Unity 的 Project 窗口中选中资产或文件夹后,可以使用 Assets>Group To 快速将选中资产添加到对应的分组。Group To 展开的一集菜单是 Build 名字,二级菜单是 Build 中的 Group 的名字。

group_to.png

在打包过程中,xasset 会主动收集资产的依赖,所以,你可以只把需要使用代码直接加载的资产添加到打包分组中。

为打包分组中的资产设置打包模式

在 Unity 编辑器的 Inspector 中,展开打包配置中的打包分组的 Assets 节点,可以针对单个 Asset 设置打包模式。

bundle-mode.png

更多细节,请参考打包模式的说明。

打包资产的常见问题

如何进行增量打包
只要不删除打包输出目录的数据,默认下次执行打包都是增量打包。
分布式架构的作用和限制
分布式架构对团队的帮助主要针对大体量的项目,例如,数万或更多的资产的时候。对于相对独立不带依赖的资产,可以按使用时机拆分为不同的构建单元,按需分批次提交,减少算力浪费导致打包等待时间。

例如,配置文件和美术资产通常没有引用关系,而修改配置的次数可能是修改资产的次数的数倍,这时候可以为配置文件和美术资产分别创建独立的打包配置。再例如,UI和场景如果没有交叉引用,也可以分别创建独立的打包配置。依此类推,角色模型动画贴图、粒子特效等可以遵循没有交叉引用的创建独立打包配置,来优化打包速度。

在生产环境中,通常配置文件单独打包可能只需要 3-5 分钟升至更快,而混合美术资产打包可能需要 10 分钟或者更久,通过分而治之的概念,可以有效减少不必要的打包等待时间,1 次打包节省 5 分钟,1 天打包 3 次,1 个月下来 22 天可以节省 5 x 3 x 22 = 330 分钟,持续下来,可以节省多少人力支出了都在其次,关键是团队可以把更多的时间花在内容创作上。

显然,分布式架构对大体量项目的资产打包带来的助力是可以预见的,只要在制作上,尽可能把对象引用改成路径引用,就可以最大化的释放分布式架构的对打包提速的助力。而有交叉引用的也应该尽可能解除引用关系(对象引用的可以改成路径引用),不仅方便分批按需打包(减少开发人员的等待时间),而且更方便按需加载(创造更好的用户体验)。

另外,分而治之不仅可以加快打包速度,其实,还可以把出问题的地方局限化。毕竟,分布式架构之后,可以改了什么才打什么,没改的不用打包,哪怕构建管线有坑,不打包,自然不会受影响。