UE4 StringTable和EnumName的兩三事
如何將某個(gè)枚舉的所有成員作為Key批量添加至特定StringTable中
↑↑↑? 本文內(nèi)容??↑↑↑
順便提了一嘴EnumName相關(guān)的事情。
話說(shuō)我這一下午都在干什么呀……
前置:
StringTable最常用的 藍(lán)圖API是 GetStringTableEntrySourceString,通過(guò)傳入ID和Key,來(lái)查找對(duì)應(yīng)的Source(即Value)。其中ID即為其右鍵CopyReference后,去掉文件類(lèi)型說(shuō)明后的路徑。如:
以Game/Blueprint下的ST_Demo為例,右鍵復(fù)制引用得到的路徑為:
StringTable'/Game/Blueprint/ST_Demo.ST_Demo'
則其ID為 /Game/Blueprint/ST_Demo.ST_Demo。
其實(shí)我完全無(wú)法理解為什么它不給一個(gè)直接傳資源引用的方法……如代碼所示:

一、StringTable相關(guān)API
為指定StringTable添加鍵值對(duì):
清空鍵值對(duì)的方法:
在此基礎(chǔ)上,我們有了為StringTable添加新行的庫(kù)方法:
通過(guò)該方法,我們其實(shí)已經(jīng)可以實(shí)現(xiàn),在藍(lán)圖中使用代碼去添加的效果。就是這么簡(jiǎn)單。

二、枚舉相關(guān)
首先我們使用StaticEnum獲取枚舉對(duì)象。
A、獲取枚舉的成員數(shù)量 (長(zhǎng)度)??
其他的,在枚舉的末端添加一個(gè)Last 成員,也是比較常用的方法。而此時(shí)枚舉的長(zhǎng)度便是:
B、獲取枚舉的名稱
枚舉有三種名稱,分別是ShortName、DisplayName以及FullName。
以EMyEnum中的Value1為例。

① ShortName
短稱?即為成員名稱?"Value1",它的獲取方式為:

② DisplayName
展示名稱?為"值1",它的獲取方法是:
藍(lán)圖中我們可以通過(guò)直接通過(guò)ToString?得到它的DisplayName。
注:原則上 DisplayName是不應(yīng)該使用中文字符的。但我就是要用。

③ FullName / EnumName
全稱?為"EMyEnum::Value1",它的獲取方式為:
藍(lán)圖中我們可以先將它轉(zhuǎn)換為FName,再轉(zhuǎn)化為String得到FullName。

最終方法
在此基礎(chǔ)上我們有了將枚舉批量加入StringTable的方法:
比較遺憾的是template無(wú)法通過(guò)UFunction向上暴露,因此對(duì)于C++枚舉類(lèi)來(lái)說(shuō),我們只能通過(guò)多次載入Template 函數(shù)的方式為它們每個(gè)單獨(dú)寫(xiě)一個(gè)方法。
比較神奇的是如果我們可以向上暴露一個(gè)UEnum*,此時(shí)所有藍(lán)圖定義的枚舉類(lèi),都可以直接被我們選擇。