Table of Contents

资产包

高级 程序员

编译之后,资产会被转换为资产包(Asset bundle)。默认情况下只会创建一个资产包,但你可以更改这一行为,例如:把 DLC 内容分离到单独的包中,以便单独销售。

游戏启动时,Stride 只加载 default 包。其他包需要通过代码手动加载。

创建资产包

Note

目前,这必须手动完成。

要创建新的资产包,你需要修改项目包的 .sdpkg 文件。更多信息请参阅项目包属性。

包定义在 Bundle 属性下。每个包都有一个 Name、一个对其他包的 Dependencies 列表,以及一个 Selectors 列表,用于指定哪些资产属于该包。

选择器有 2 种类型:

  • 🏷️ 标签选择器(Tag selector) —— 选择至少具有其中一个指定 Tags 的资产。
  • 📁 路径选择器(Path selector) —— 根据提供的 Paths 列表选择资产。过滤器的工作方式与 .gitignore 过滤约定类似,但有几处例外:!(取反)、[](分组)和 #(注释)。这意味着你可以选择单个文件、整个文件夹或具有特定扩展名的文件。

以下是配置示例:

Bundles:
 - Name: CustomBundleA
   Selectors:
    - !TagSelector
      Tags: 
        - MyTag1
        - MyTag2
 - Name: CustomBundleB
   Dependencies:
    - CustomBundleA
   Selectors:
    - !TagSelector
      Tags: 
        - MyTag3
        - MyTag4
    - !PathSelector
      Paths:
        - folder1/
        - /folder2/
        - *.sdtex
        - folder3/*.sdscene
Caution

如果你的任何自定义包是空的,Stride 将无法构建游戏。

根资产

需要注意的是,可选包(如 DLC 内容)中的资产不应被默认包中的资产所引用。如果另一个包缺失,Stride 在尝试加载其资产时会失败。

但是,如果一个包中的资产没有被引用,Stride 就不会编译它们。为避免这种情况,请务必将适当的资产(如场景)标记为根资产。这些资产随后就可以在代码中访问。

有关根资产的更多信息,请参阅资产编译。

编译行为

Stride 会尝试把资产放到最合适的包中。

  1. 未在 Bundles 中定义的资产会被放入 default 包,游戏启动时会自动加载该包。
  2. 如果一个资产同时被 BundleA 和 BundleB 选中,而 BundleB 依赖 BundleA,则该资产只放入 BundleA。
  3. 如果一个资产同时被 BundleA 和 BundleB 选中,且两者互不依赖,则该资产会同时放入两个包。
Note

加载包含同一资产的两个包不会导致重复。

加载包

Stride 会自动加载 default 包。但其他包需要通过代码使用 LoadBundle 手动加载。

await Content.FileProvider.ObjectDatabase.LoadBundle("NameOfBundle");
Note

加载一个包时,它的依赖项会被自动加载。

之后可以通过内容系统加载资产。更多信息请参阅在代码中使用资产。

包的位置

包位于构建出的可执行文件旁边的 data/db/bundles 目录中。你可以通过它们的名称来辨认。

有关构建位置的更多信息,请参阅构建文件结构。

Note

包往往会拆分为多个以相同名称开头的文件。

另请参阅