欢迎光临散文网 会员登陆 & 注册

UE4 StringTable和EnumName的两三事

2023-02-22 19:23 作者:末日时你吃了吗  | 我要投稿

如何将某个枚举的所有成员作为Key批量添加至特定StringTable中
↑↑↑  本文内容  ↑↑↑

顺便提了一嘴EnumName相关的事情。
话说我这一下午都在干什么呀……


前置:

StringTable最常用的 蓝图API是 GetStringTableEntrySourceString,通过传入ID和Key,来查找对应的Source(即Value)。其中ID即为其右键CopyReference后,去掉文件类型说明后的路径。如:

以Game/Blueprint下的ST_Demo为例,右键复制引用得到的路径为:

StringTable'/Game/Blueprint/ST_Demo.ST_Demo'

则其ID为 /Game/Blueprint/ST_Demo.ST_Demo。


其实我完全无法理解为什么它不给一个直接传资源引用的方法……如代码所示:

效果图


一、StringTable相关API

为指定StringTable添加键值对:

清空键值对的方法:


在此基础上,我们有了为StringTable添加新行的库方法:

通过该方法,我们其实已经可以实现,在蓝图中使用代码去添加的效果。就是这么简单。



二、枚举相关


首先我们使用StaticEnum获取枚举对象。


A、获取枚举的成员数量 (长度)  


其他的,在枚举的末端添加一个Last 成员,也是比较常用的方法。而此时枚举的长度便是:


B、获取枚举的名称

枚举有三种名称,分别是ShortNameDisplayName以及FullName

以EMyEnum中的Value1为例。


① ShortName

短称 即为成员名称 "Value1",它的获取方式为:


② DisplayName

展示名称 为"值1",它的获取方法是:

蓝图中我们可以通过直接通过ToString 得到它的DisplayName。

注:原则上 DisplayName是不应该使用中文字符的。但我就是要用。


③ FullName / EnumName

全称 为"EMyEnum::Value1",它的获取方式为:

蓝图中我们可以先将它转换为FName,再转化为String得到FullName。



最终方法

在此基础上我们有了将枚举批量加入StringTable的方法:

比较遗憾的是template无法通过UFunction向上暴露,因此对于C++枚举类来说,我们只能通过多次载入Template 函数的方式为它们每个单独写一个方法。

比较神奇的是如果我们可以向上暴露一个UEnum*,此时所有蓝图定义的枚举类,都可以直接被我们选择。




UE4 StringTable和EnumName的两三事的评论 (共 条)

分享到微博请遵守国家法律