前言
对于原生的C++,是无法知道一个枚举值对应的字符串的。 而在UE中,有反射系统(或者说UObejct系统)可以实现这一需求。
实践
首先,枚举类型本身要被UENUM() 进行标记,比如:
然后,可以使用FindObject<UEnum> 根据枚举类型的名字获得对应的UEnum 对象。之后就可以使用UEnum 的操作GetNameByValue 获得一个值对应的字符串了。代码如下:
const TextureCompressionSettings value = TextureCompressionSettings::TC_Displacementmap;
const UEnum* EnumObject = FindObject<UEnum>(ANY_PACKAGE, TEXT("TextureCompressionSettings"));
const FName EnumName = (EnumObject->GetNameByValue(value));
测试将其打印到对话框中可看到:
限制
其实,在绝大多数场合都可以使用。由于它使用了 UObejct系统,因此使用它的模块必须依赖CoreUObject 模块,而它是一个很底层的模块,几乎所有其他地方都会依赖。
不过,也有少数更底层的模块不依赖它。此时看是否能加上对其的依赖,然后确保#include "Runtime/CoreUObject/Public/UObject/UObjectGlobals.h" ,因为FindObject 函数在其中定义。
其他
UEnum 的其它操作可见Engine\Source\Runtime\CoreUObject\Public\UObject\Class.h
|