UE5新特性:Data Registry
序
UE5多了一个叫做DataRegistry(下称DR)的东西, 目前处于实验性功能, 看着名字像是类似DataAsset类似的东西, 研究了一番发现这个是一个还不错的与DataTable配合使用的东西
UE文档有一个聊胜于无的文档, 看了比没看…..也没好多少(还有点误导作用) 文档链接
补充: 知乎大佬有一篇更详细的文档, 后来才发现的 链接
如何使用
使用DataRegistry需要开启插件
然后到项目设置相关的标签下找到DataRegistry, 添加若干个扫描的路径
这样项目在启动的时候UDataRegistrySubsystem
就会自动扫面路径下的所有DR文件并加载保存
当然我们需要创建DR资源
然后界面是这样色的
- RegistryType : 这个可以理解为这个DR的Key
- BaseGameplayTag: 如果你填写了, 那么这个就是RowName/否则通过真正的RowName, Epic真是对Tag这个技术无所不尽其极啊
- ItemStruct: 一般就是DataTable对应的数据结构体, 如果是CurveTable那么这里是RealCurve; 别听文档说的用DataTableHandle啥的
- DataSources: 可以选4个类型
- CurveTableSource/DataTableSource: 直接选择一个table资源
- CurveTableMetaSource/DataTableMetaSource: 通过元数据构造一个表格/数据, 感觉一般不会常用,暂略
案例
DataTable
创建一个蓝图结构体如下图
创建一个表格,数据乱填, 如下图
然后是到DR里面选择如下
红色框框中的东西错一不可,然后点刷新, 如果一切正常那么右侧就会出来正确是数据
然后就可以使用了, 看下图
Type中罗列了所有注册的DR, 同样的Item对应的是所有Row
那么如果用Tag会怎么样?
先添加上图的一堆Tag
然后选择Item的时候发现所有的选项直接变成了Tag
意味着我们的RowName需要跟这个Tag对应起来
如上图, 这俩是对应的, 需要注意Tag的命名规范
CurveTable
CurveTable如果是外部导入和UE自己有点区别, 自己创建的打开界面就是一堆的曲线, 外部导入是一个纯数据的表格, 见下面俩图
不过在DR中使用没啥区别
同样的 创建一个DR, 配置好如下图
通过EvaluateDataRegistryCurve()使用
后记
相比于传统的DataTable用DR的方式可以统一注册和加载, 统一调用, 相对于Cpp, 蓝图的优势更加明显;
不过, 目前目前还处于实验性阶段, 功能还不是特别稳定, 比如DR中添加了一个DataSource后再删除就会导致编辑器崩溃, 必须手动先把类型改成None以后在删除才可以.
所以还是坐等正式版发布