上一章:【Unity3D技术文档翻译】第1.8篇 AssetBundles 问题及解决方法
本章原文所在章节:【Unity Manual】→【Working in Unity】→【Advanced Development】→【AssetBundles】→【Unity Asset Bundle Browser tool】
Unity AssetBundle 浏览管理工具(Unity Asset Bundle Browser tool)
注意:这个工具是 Unity 标准功能之外的附加功能。想要使用它,你需要从 GitHub(点击链接) 下载,并在下载和安装 Unity 编辑器之后单独安装。
这个工具能让你浏览并编辑项目中 AssetBundles 的结构。它将阻止你创建无效的 AssetBundle,以及提醒你已经存在的 AssetBundles 是否有一些问题。它同样具有基本的构建功能。
之前我们选择资源,并在编辑器中手动设置它们的 AssetBundle,现在我们也可以使用 AssetBundle 浏览管理工具来处理这些。它可以在任何 Unity5.6 及以上版本中加入使用(将 AssetBundleBrowser 文件夹拖入项目任意位置),并且将在 Window 菜单下创建一个新的菜单选项 AssetBundle Browser。它的 configure 和 build 功能在新的窗口中被分为两个标签栏(最新的有三个标签栏,多了一个 inspect 标签):
需要 Unity5.6 及以上版本
Configure 窗口使用
注意:这个功能处于预发布状态,因此在你使用之前,我们建议你将项目进行备份。
这个窗口提供了浏览器样式的界面,用于管理和修改项目中的 AssetBundles。第一次打开这个工具的时候,它将在后台解析所有 AssetBundles 数据,并慢慢地标记它检测到的警告和错误。它将尽可能的与项目保持同步,但并不是总能察觉到工具外发生的动态。想要强制进行错误检测,或者想要更新工具的状态,点击左上角的刷新按钮即可。
窗口被分为了四个部分:Bundle 列表(Bundle List)、Bundle 详情(Bundle Details)、 资源列表(Asset List),以及 资源详情(Asset Details)。如图:
Bundle 列表
左边的窗格展示了项目中所有的 AssetBundles。可使用的功能有:
- 选择一个或者一批 Bundles,在右侧的资源列表窗格中查看 Bundles 中包含的资源。
- 带有版本变量的 Bundles 会变成深灰色,并且能被展开,显示版本变量列表。
- 右击或者缓慢地双击,来重命名 Bundle 或者 Bundle 文件夹。
- 如果一个 Bundle 有任何错误、警告或者信息提示,它的右侧会出现一个图标。鼠标悬停在图标上可以看到更详细的信息。
- 如果一个 Bundle 包含至少一个场景(使这个 Bundle 成为“场景Bundle”),同时还包含了非场景资源,那么就会被添加“报错”标记。在你解决这个错误前,该 Bundle 将不会被构建。
- 包含重复资源的 Bundles 将被添加“警告”标记。
- 空 Bundles 将被添加“信息提示”标记。由于许多原因,空 Bundles 十分不稳定,并且有时候可能会从列表中消失。
- Bundles 文件夹具有所包含的 Bundles 的所有信息提示。
- 想要解决重复资源警告,你可以采取以下方法:
① 右击一个单独的 Bundle,将所有重复资源转移到一个新的 Bundle。
② 右击多个 Bundles,你可以选择将所有重复资源转移到一个新的 Bundle,或者只是将它们相互之间重复的资源转移到一个新的 Bundle。
③ 你也可以直接从“资源列表”窗格中拖拽重复的资源到“Bundle 列表”窗格,将它们移进一个 Bundle。更多关于这个方法的信息,可以在下面的资源列表特性介绍中看到。 - 右击或者点击 DEL 按键来删除 Bundles。
- 拖拽 Bundles,将它们移进或者移出文件夹,或者合并它们。
- 从 Project 浏览器拖拽资源进 Bundles 来添加它们。
- 拖拽资源到空白处来创建一个新的 Bundle。
- 右击创建新的 Bundle,或者 Bundle 文件夹。
- 右击选择“Convert to Variant(转换为版本变量 Bundle)”。这将为选中的 Bundle 添加一个版本变量(默认叫“newvariant”)。已选中 Bundle 中的所有资源都将移入这个新的版本变量 Bundle。未来将会有版本变量 Bundles 间的错配检测(三思:现在已经有如果两个版本变量 Bundles 中的资源数量或者名称不相同就会报警告的检测(因为除了资源的压缩格式以外,两个版本变量 Bundles 中的资源应该完全相同))。
标准 Bundle 的图标:
场景 Bundle 的图标:
Bundle 详情
左下角的窗格展示了 Bundle 列表中选中的 Bundles 的详情。这个窗格将显示以下几个信息:
- 整个 Bundle 大小。这是磁盘上所有资源的总和。
- 当前 Bundle 依赖的 Bundles。
- 和当前 Bundle 有关的任何提示信息(错误/警告/提示信息)。
资源列表
右上角的窗格提供了 Bundle 列表中选中的 Bundles 的资源列表。可用的功能如下:
- 查看预计包含在 Bundle 中的所有资源,按照列表的头信息进行排序(有三个排序选项:资源名称/Bundle 名称/大小,手动点选)。
- 查看明确包含在 Bundle 中的所有资源,即明确被分配给 Bundle 的资源。检查器会反映 Bundle 包含的东西,并且在资源名旁边能看到 Bundle 名称。
- 查看隐式包含在 Bundle 中的所有资源。这些资源名称旁边的 Bundle 名称是 auto。如果在检查器中查看这些资源,会发现它们的 Bundle 配置是 None。
① 这些资源能被添加进 Bundle 是因为 Bundle 内有资源依赖了它们。只有没有明确配置 Bundle 的资源才会被隐式地包含进其他 Bundles。
② 注意:隐式包含列表不一定完整。已知材质、纹理不是总能显示正确。
③ 因为多个资源可以依赖相同的资源,因此一份资源被隐式包含在多个 Bundles 中是常见的。如果工具检测到了这种情况,就会将这些 Bundles 和资源都打上警告标记。
④ 为了解决重复包含的问题,你需要手动将资源移出,放入一个新的 Bundle,或者右击 Bundle,选择“Move duplicate”选项之一。 - 可以从 Project 窗口拖拽资源进这个窗格的 Bundle 上。只有以一个 Bundle 为目标,且资源类型和 Bundle 类型一致(比如将 scenes 拖拽到 scene Bundle 上),才能拖拽成功。
- 从资源列表拖拽明确或者隐式包含的资源到 Bundle 列表,将它们添加到其他不同的 Bundles 中,或者新建的一个 Bundle 中。
- 右击,或者按 DEL 键,将选中的资源从 Bundles 中移除(只是从 Bundles 中移除,不会从项目中移除)。
- 选择或者双击资源,在 Project 窗口中定位它。
当 Bundles 中包含文件夹的时候,有点需要注意。从 Project 窗口中直接拖拽一个资源文件夹到 Bundle 是可以的。当这么做之后,文件夹本身是明确包含的,而文件夹内的内容是隐式包含的。这反映了将资源分配给 Bundle 的优先级。举个例子,如果你的游戏有五个 prefabs 在 Assets/Prefabs 下,其中一个 PrefabA 是明确分配 Bundle 的,然后你拖拽 Prefabs 文件夹到 Bundle 窗格,那么 PrefabA 将自动生成一个 Bundle,其他四个 prefabs 和文件夹一起生成一个以文件夹小写名称命名的 Bundle。
资源详情
右下角窗格展示了资源列表中选中资源的详情。这个窗格不能交互,只用来显示以下可能出现的信息:
- 资源的完整路径
- 如果是隐式包含的,显示隐式包含的原因(比如:Is auto included in bundle(s) due to parent(s): TestFolder. 因为父子关系而被隐式包含)
- 如果有警告,显示警告的原因
- 如果有报错,显示报错的原因
可能的问题及解决方案
- 无法重命名或者删除一个明确的 Bundle。当你第一次将本工具添加到已存在的项目中时,这个问题偶尔会发生。你需要通过 Unity 菜单系统强制重新导入你的资源,来刷新数据。
Build 窗口使用
Build 窗口提供了基本的构建功能,让你可以开始使用 AssetsBundles。在大多数专业的使用情景下,开发者不再需要更高级的构建步骤了。如果这不能满足你的需求,你可以查看本工具构建相关的代码,并重写它们。窗口相关交互接口:
- Build Target - Bundles 将要构建到的平台。
- Output Path - 保存构建好的 Bundles 的路径。默认路径是 AssetBundles/。你可以手动编辑这个路径,或者选择“Browser”来选择路径。想要返回默认路径,点击“Reset”按钮即可。
- Clear Folders - 在构建之前,将构建路径下的文件夹的所有数据删除。
- Copy to StreamingAssets - 在构建完成后,将结果拷贝到
Assets/StreamingAssets 目录下。这在测试中可以使用,但是在产品中不起作用。 - Advanced Settings
① Compression - 在不压缩、LZMA压缩算法、LZ4压缩算法中选择一个作为压缩方式。
② Exclude Type Information - 在 AssetBundles 中不包含类型信息。
③ Force Rebuild - 在构建时重新构建需要构建的 AssetBundles。和 “Clear Folders”不同的是,在构建时不被包含的 Bundles 不会被删除。
④ Ignore Type Tree Changes - 当进行增量构建检查时,忽略类型树的变化。
⑤ Append Hash - 为 Bundle 名称添加 hash。
⑥ Strict Mode - 在构建中途,如果有任何报错,就终止构建。
⑦ Dry Run Build - 进行 dry run 构建。
⑧ Build - 开始构建。
(三思:AssetsBundles 相关内容告一段落。后面看到其他相关内容会作为补充内容加上。后面会继续翻译官方手册其他部分的内容,视重要性和难度来选择,第2.0篇再见!)
如果本文对你有帮助的话,点个赞或者评论一下吧!