版本:Unity 6 (6000.0)
语言:英语
AssetBundle 工作流程
AssetBundle 依赖项

准备资源以供 AssetBundle 使用

在定义 AssetBundle 时,需要注意一些规则

  • 场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您可以放置环境、障碍物和装饰,基本上是分段设计和构建游戏。 更多信息
    参见 术语表
    和资源不能一起包含在同一个 AssetBundle 中。单个 AssetBundle 只能包含场景资源
  • 特定的场景或资源不能分配给多个 AssetBundle
  • AssetBundle 不能包含脚本资源
  • StreamingAssets 文件夹内的文件不能放入 AssetBundle
  • AssetBundle 名称不能与输出文件夹名称相同
  • AssetBundle 只能在其构建的特定平台上加载。
  • 编辑器可以加载任何 AssetBundle,而不管当前激活的平台配置文件是什么。但是,如果 AssetBundle 中的单个资源使用其编辑器平台不支持的特定于平台的格式,则它们可能无法成功加载或渲染。例如,Android 着色器在 GPU 上运行的程序。 更多信息
    参见 术语表
    在 Windows 编辑器中可能会呈现为品红色。

除了这些规则之外,您可以自由地将任何资源分配到任何您想要的包中。但是,在设置包时,需要考虑某些策略。

逻辑实体分组

逻辑实体分组是一种您可以用来决定如何组织项目每个 AssetBundle 中内容的策略。其原则是根据每个内容片段所代表的项目的函数部分做出决策。这包括用户界面、角色、环境等部分,以及应用程序生命周期中可能频繁出现的任何其他部分。

示例

  • 将用户界面屏幕的所有纹理和布局数据捆绑在一起
  • 将角色/一组角色的所有模型和动画捆绑在一起
  • 将跨多个关卡共享的场景片段的纹理和模型捆绑在一起

通过逻辑实体分组组织 AssetBundle 非常适合下载内容 (DLC),因为它使您能够更轻松地对项目进行小的更改,而无需用户重新下载大量未更改的资源。

能够正确实施此策略的最大技巧是,将资源分配到各自包中的开发人员必须准确了解项目何时何地将使用每个资源。

类型分组

类型分组是一种策略,您将类似类型的资源(例如音频轨道或语言本地化文件)分配到单个 AssetBundle 中。

类型分组有助于建立很少更改的 AssetBundle。以这种方式分组 AssetBundle 可能会导致在进行增量构建时,更改并需要分发的 AssetBundle 数量减少。缺点是,可能需要下载和加载更多 AssetBundle 才能在运行时将所有相关对象组合在一起。

并发内容分组

并发内容分组是指您将同时加载和使用的资源捆绑在一起。您可以将这些类型的包视为用于基于关卡的游戏,其中每个关卡包含完全独特的角色、纹理、音乐等。您需要绝对确定一个并发内容分组包中的资源仅在该包中的其余资源也将使用的同时使用。依赖于并发内容分组包中的单个资源会导致加载时间显着增加。您将被迫下载该单个资源的整个包。

并发内容分组包最常见的用例是基于场景的包。在此分配策略中,每个场景包应包含该场景的大部分或所有依赖项。

注意:构建包含场景的 AssetBundle 时,该场景引用的任何资源也将自动包含在 AssetBundle 中,除非这些资源明确分配给其他 AssetBundle。这在执行并发内容分组时很方便,但如果任何引用的资源也由您构建到单独 AssetBundle 中的其他场景使用,则需要注意重复的资源。

其他提示

项目绝对可以并且应该根据需要混合使用这些策略。为任何给定场景使用最佳资源分配策略可以大大提高任何项目的效率。

例如,项目可能会决定将其不同平台的用户界面 (UI) 元素分组到其自己的平台 UI 特定包中,但将其交互式内容按关卡/场景分组。

无论您遵循哪种策略,以下是一些在整个过程中需要注意的其他提示

  • 将频繁更新的对象拆分为与很少更改的对象分开的 AssetBundle
  • 将可能同时加载的对象分组。例如,模型、其纹理及其动画
  • 如果您注意到多个 AssetBundle 中的多个对象依赖于来自完全不同 AssetBundle 的单个资源,请将依赖项移动到单独的 AssetBundle。如果多个 AssetBundle 引用其他 AssetBundle 中的同一组资源,则可能值得将这些依赖项提取到共享的 AssetBundle 中以减少重复。
  • 如果两组对象不太可能同时加载,例如标准和高清资源,请确保它们位于不同的 AssetBundle 中。
  • 如果 AssetBundle 中不到 50% 的内容经常同时加载,请考虑将其拆分。
  • 考虑组合内容较小但其内容经常同时加载的 AssetBundle
  • 如果一组对象只是同一对象的不同版本,请考虑 AssetBundle 变体
AssetBundle 工作流程
AssetBundle 依赖项