UE4 StringTable和EnumName的两三事
如何将某个枚举的所有成员作为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、获取枚举的名称
枚举有三种名称,分别是ShortName、DisplayName以及FullName。
以EMyEnum中的Value1为例。

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

② DisplayName
展示名称 为"值1",它的获取方法是:
蓝图中我们可以通过直接通过ToString 得到它的DisplayName。
注:原则上 DisplayName是不应该使用中文字符的。但我就是要用。

③ FullName / EnumName
全称 为"EMyEnum::Value1",它的获取方式为:
蓝图中我们可以先将它转换为FName,再转化为String得到FullName。

最终方法
在此基础上我们有了将枚举批量加入StringTable的方法:
比较遗憾的是template无法通过UFunction向上暴露,因此对于C++枚举类来说,我们只能通过多次载入Template 函数的方式为它们每个单独写一个方法。
比较神奇的是如果我们可以向上暴露一个UEnum*,此时所有蓝图定义的枚举类,都可以直接被我们选择。