资产包
高级 程序员
编译之后,资产会被转换为资产包(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 会尝试把资产放到最合适的包中。
- 未在
Bundles中定义的资产会被放入 default 包,游戏启动时会自动加载该包。 - 如果一个资产同时被 BundleA 和 BundleB 选中,而 BundleB 依赖 BundleA,则该资产只放入 BundleA。
- 如果一个资产同时被 BundleA 和 BundleB 选中,且两者互不依赖,则该资产会同时放入两个包。
Note
加载包含同一资产的两个包不会导致重复。
加载包
Stride 会自动加载 default 包。但其他包需要通过代码使用 LoadBundle 手动加载。
await Content.FileProvider.ObjectDatabase.LoadBundle("NameOfBundle");
Note
加载一个包时,它的依赖项会被自动加载。
之后可以通过内容系统加载资产。更多信息请参阅在代码中使用资产。
包的位置
包位于构建出的可执行文件旁边的 data/db/bundles 目录中。你可以通过它们的名称来辨认。
有关构建位置的更多信息,请参阅构建文件结构。

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