UE5新特性:Data Registry

UE5多了一个叫做DataRegistry(下称DR)的东西, 目前处于实验性功能, 看着名字像是类似DataAsset类似的东西, 研究了一番发现这个是一个还不错的与DataTable配合使用的东西

UE文档有一个聊胜于无的文档, 看了比没看…..也没好多少(还有点误导作用) 文档链接

补充: 知乎大佬有一篇更详细的文档, 后来才发现的 链接

Epic讲座

如何使用

使用DataRegistry需要开启插件

image-20220614105015868

然后到项目设置相关的标签下找到DataRegistry, 添加若干个扫描的路径

这样项目在启动的时候UDataRegistrySubsystem就会自动扫面路径下的所有DR文件并加载保存

当然我们需要创建DR资源

image-20220614105732827

然后界面是这样色的

image-20220614105856769

  • RegistryType : 这个可以理解为这个DR的Key
  • BaseGameplayTag: 如果你填写了, 那么这个就是RowName/否则通过真正的RowName, Epic真是对Tag这个技术无所不尽其极啊
  • ItemStruct: 一般就是DataTable对应的数据结构体, 如果是CurveTable那么这里是RealCurve; 别听文档说的用DataTableHandle啥的
  • DataSources: 可以选4个类型
    • CurveTableSource/DataTableSource: 直接选择一个table资源
    • CurveTableMetaSource/DataTableMetaSource: 通过元数据构造一个表格/数据, 感觉一般不会常用,暂略

案例

DataTable

创建一个蓝图结构体如下图

image-20220614112705301

创建一个表格,数据乱填, 如下图

image-20220614112733964

然后是到DR里面选择如下

image-20220614113121595

红色框框中的东西错一不可,然后点刷新, 如果一切正常那么右侧就会出来正确是数据

image-20220614113216901

然后就可以使用了, 看下图

image-20220614113337841

image-20220614113405266

Type中罗列了所有注册的DR, 同样的Item对应的是所有Row


那么如果用Tag会怎么样?

image-20220614113445370

先添加上图的一堆Tag

image-20220614113513048

然后选择Item的时候发现所有的选项直接变成了Tag

意味着我们的RowName需要跟这个Tag对应起来

image-20220614113755703

如上图, 这俩是对应的, 需要注意Tag的命名规范

CurveTable

CurveTable如果是外部导入和UE自己有点区别, 自己创建的打开界面就是一堆的曲线, 外部导入是一个纯数据的表格, 见下面俩图

image-20220614114113360

image-20220614114124453

不过在DR中使用没啥区别

同样的 创建一个DR, 配置好如下图

image-20220614114201844

通过EvaluateDataRegistryCurve()使用

image-20220614114307563

后记

相比于传统的DataTable用DR的方式可以统一注册和加载, 统一调用, 相对于Cpp, 蓝图的优势更加明显;

不过, 目前目前还处于实验性阶段, 功能还不是特别稳定, 比如DR中添加了一个DataSource后再删除就会导致编辑器崩溃, 必须手动先把类型改成None以后在删除才可以.

所以还是坐等正式版发布