UE4输出枚举变量的值名称

UE4输出枚举变量的值名称

  • 背景
  • 实现
  • 示例
  • 注意事项

背景

输出日志的时候总是只能输出具体的值,看日志的时候一脸懵逼,我到底输出的是啥,自己都不明白日志里面一堆值是什么意思,还得查代码看每个枚举的具体值,不想这样就得在输出的位置疯狂switch写日志,不用怕,UE4解放了你,UE4可以直接输出枚举的值的名称啦

实现

在VisualLoggerTypes中,有一个很好用的宏,可以直接把枚举的值转成名称的字符串。

#if ENABLE_VISUAL_LOG
#define DEFINE_ENUM_TO_STRING(EnumType) FString EnumToString(const EnumType Value) \
{ \
	static const UEnum* TypeEnum = FindObject(ANY_PACKAGE, TEXT(#EnumType)); \
	return TypeEnum->GetNameStringByIndex(static_cast(Value)); \
}
#define DECLARE_ENUM_TO_STRING(EnumType) FString EnumToString(const EnumType Value)
#else
#define DEFINE_ENUM_TO_STRING(EnumType) 
#define DECLARE_ENUM_TO_STRING(EnumType)
#endif // ENABLE_VISUAL_LOG

我们先要#include “VisualLogger/VisualLoggerTypes.h”
然后调用宏定义一个DEFINE_ENUM_TO_STRING(YourUEnum);转换函数
然后在需要转换的地方调用函数EnumToString(YourUEnum::Value);

示例

 //产品型号
UENUM(BlueprintType)
enum class EColor : uint8
{
	Red=0,
	Green =1,
	Blue =2
};

DEFINE_ENUM_TO_STRING(EColor );
FString MyColor = EnumToString(EColor ::Red);

执行之后MyColor的值为TEXT(“Red”);

注意事项

这里可以实现这个功能的枚举一定是Unreal的UENUM,因为实际使用的是UE的特性实现的。另外如果不想这么复杂,也可以直接使用宏的展开,这样的结构也是一样的

	static const UEnum* TypeEnum = FindObject(ANY_PACKAGE, TEXT("EColor ")); 
	FString MyColor = TypeEnum->GetNameStringByIndex(static_cast(EColor ::Red)); 

你可能感兴趣的:(UE4,ue4,c++,开发语言)