数据注册表

使用数据注册表可以存储、合并、读取和管理不同来源的数据。

Choose your operating system:

Windows

macOS

Linux

由于数据注册表包含在插件中,因此需要一些设置才能使用它。

[](GameplayFeatures/DataRegistries/QuickStart)
详细介绍了设置流程,并介绍了一些基本概念。

数据注册表(Data Registry) 是一种高效的全局存储空间,用于存储带有 USTRUCT 标记的数据结构。

数据注册表支持同步和异步数据访问,还支持用户自定义缓存行为。它们主要处理常规的只读数据。

如果是基于特定会话的数据,例如情节进展或角色的当前状态,请使用引擎的"保存游戏(Save Game)"系统。

你可以将数据注册表设置成为从不同源头加载或生成数据,还可以通过资产扫描和手动注册来填充。

数据注册表类似于 复合数据表(Composite Data Tables),但除了标准的表格数据行之外,还可以存储曲线数据。此外,它使用一个间接层,而不是手动将多个表格合并在一起。

数据源

[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-BP#DataSources]
[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-CPP#DataSources]

![](DataRegistrySources.png)

数据注册表资产内置的四种数据注册表源类型,以数组保存(参见下文)。

数据注册表源

[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-BP#DataRegistrySources]
[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-CPP#DataRegistrySources]

元数据注册表源

[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-BP#MetaDataRegistrySources]
[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-CPP#MetaDataRegistrySources]

标识符

数据注册表插件使用独有的标识符来查找数据注册表以及其中包含的单个数据项。

这些标识符本质上都是基于字符串的名称,不过 FDataRegistryType(用于数据注册表资产)和 FDataRegistryId(用于数据注册表中的单个数据项)结构却属于包装器(wrapper),能提供实用的编辑器内部功能。

FDataRegistryType 用于辨识数据注册表资产, FDataRegistryId 用于辨识数据注册表和其中的特定数据项。如果你需要查找数据注册表资产或从中检索单个数据项,可以使用这些标识符类型。

每个数据注册表资产都必须在 注册表类型(Registry Type) 字段中具有唯一名称;如果两个数据注册表资产在此字段中具有相同的名称,系统将仅识别和填充其中一个。

类似的,如果多个数据项共用同一个标识数值(名称或Gameplay标签),注册表会读取所有项,但检索操作将仅访问数据注册表资产加载的第一个数据项;关于数据项的加载顺序,请参见数据源部分。

使用C++的开发人员可以通过创建子数据注册表类和重载 ResolveDataRegistryId 函数来更改此行为。

数据注册表资产标识符

[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-BP#DataRegistryAssetIdentifiers]
[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-CPP#DataRegistryAssetIdentifiers]

DataRegistryAssetType.png

上图:设置数据注册表资产的标识符。

下图:在需要引用数据注册表资产的Actor中选择一个标识符,或者选择该数据注册表中的特定数据行。

DataRegistryAssetReferences.png

数据项标识符

[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-BP#DataItemIdentifiers]
[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-CPP#DataItemIdentifiers]

如果编辑某个数据注册表资产,在通过数据项标识符引用该资产的其他资产中,你的更改可能不会立即生效。

如果发生这种情况,可能是因为数据项标识符在其下拉列表中包含废弃的数据行。

在引用数据注册表(而不是数据注册表资产自身)的资产中点击 编译(Compile) 按钮,可以使用最新的数据项信息更新界面。

DataItemIDs.png

左侧是数据注册表资产的数据项选项,且ID格式使用了Gameplay标签。

右侧是使用简单名称的数据注册表资产的数据项选项。

由于 FDataRegistryId 包含一个 FDataRegistryType 成员变量(名为 RegistryType),因此不需要单独的 FDataRegistryType 标识符就可以找到包含数据行的数据注册表资产。

[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-BP#IdentifierResolution]
[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-CPP#DynamicIdentifierResolution]

快速函数参考

以下函数对于你快速掌握数据注册表很有帮助。

此处并未列出完整信息,但列出了你在项目中设置数据注册表后,访问数据时需要用到的基本函数。

[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-BP#UsefulFunctions]
[INCLUDE:InteractiveExperiences/DataDriven/DataRegistries/DataRegistries-CPP#UsefulFunctions]

与游戏功能集成

数据注册表插件可以添加来自游戏功能插件的数据注册表和单个数据注册表来源。如需相关流程的详细信息,请参见

[](GameplayFeatures/GameFeaturesAndModularGameplay)
页面。

InteractiveExperiences/DataDriven/DataRegistries\DataRegistries-CPP\DataRegistries-CPP.INT.UDN

availability: docs title: Data Registries CPP description: Data Registries CPP Excerpts parent: BuildABiggerWorld/DataRegistries type: reference

InteractiveExperiences/DataDriven/DataRegistries\DataRegistries-BP\DataRegistries-BP.INT.udn

availability: docs title: Data Registries BP description: DataRegistries BP Excerpts parent: BuildABiggerWorld/DataRegistries type: reference

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消