[UE4/UE5] Enum の情報取得について

はじめに

この記事では Enum の情報を取得するやり方について記載します。


やり方

「StaticEnum」を使用します

以下ドキュメント


使用例

	UENUM()
	enum class EHogeEnum
	{
		Hoge_001,
		Hoge_002,
		Hoge_003,
	};
auto HogeEnum = StaticEnum<EHogeEnum>();
const auto Count = HogeEnum->NumEnums();
for (int32 Index = 0; Index < Count; Index++)
{
	UE_LOG(LogTemp, Log, TEXT("---------------------------------"));
	const auto DisplayNameTextByValue = HogeEnum->GetDisplayNameTextByValue(Index);
	UE_LOG(LogTemp, Log, TEXT("DisplayNameTextByValue [%s]"), *DisplayNameTextByValue.ToString());

	const auto NameStringByIndex = HogeEnum->GetNameStringByIndex(Index);
	UE_LOG(LogTemp, Log, TEXT("NameStringByIndex [%s]"), *NameStringByIndex);

	const auto NameByValue = HogeEnum->GetNameByValue(Index);
	UE_LOG(LogTemp, Log, TEXT("NameByValue [%s]"), *NameByValue.ToString());

	const auto NameByIndex = HogeEnum->GetNameByIndex(Index);
	UE_LOG(LogTemp, Log, TEXT("NameByIndex [%s]"), *NameByIndex.ToString());

	const auto IndexByValue = HogeEnum->GetIndexByValue(Index);
	UE_LOG(LogTemp, Log, TEXT("IndexByValue [%d]"), IndexByValue);

	const auto IndexByName = HogeEnum->GetIndexByName(NameByValue);
	UE_LOG(LogTemp, Log, TEXT("IndexByName [%d]"), IndexByName);

	const auto ValueByName = HogeEnum->GetValueByName(NameByValue);
	UE_LOG(LogTemp, Log, TEXT("ValueByName [%lld]"), ValueByName);

	const auto ValueByIndex = HogeEnum->GetValueByIndex(Index);
	UE_LOG(LogTemp, Log, TEXT("ValueByIndex [%lld]"), ValueByIndex);
}


実行結果

LogTemp: ---------------------------------
LogTemp: DisplayNameTextByValue [Hoge 001]
LogTemp: NameStringByIndex [Hoge_001]
LogTemp: NameByValue [EHogeEnum::Hoge_001]
LogTemp: NameByIndex [EHogeEnum::Hoge_001]
LogTemp: IndexByValue [0]
LogTemp: IndexByName [0]
LogTemp: ValueByName [0]
LogTemp: ValueByIndex [0]
LogTemp: ---------------------------------
LogTemp: DisplayNameTextByValue [Hoge 002]
LogTemp: NameStringByIndex [Hoge_002]
LogTemp: NameByValue [EHogeEnum::Hoge_002]
LogTemp: NameByIndex [EHogeEnum::Hoge_002]
LogTemp: IndexByValue [1]
LogTemp: IndexByName [1]
LogTemp: ValueByName [1]
LogTemp: ValueByIndex [1]
LogTemp: ---------------------------------
LogTemp: DisplayNameTextByValue [Hoge 003]
LogTemp: NameStringByIndex [Hoge_003]
LogTemp: NameByValue [EHogeEnum::Hoge_003]
LogTemp: NameByIndex [EHogeEnum::Hoge_003]
LogTemp: IndexByValue [2]
LogTemp: IndexByName [2]
LogTemp: ValueByName [2]
LogTemp: ValueByIndex [2]
LogTemp: ---------------------------------
LogTemp: DisplayNameTextByValue [Hoge MAX]
LogTemp: NameStringByIndex [Hoge_MAX]
LogTemp: NameByValue [EHogeEnum::Hoge_MAX]
LogTemp: NameByIndex [EHogeEnum::Hoge_MAX]
LogTemp: IndexByValue [3]
LogTemp: IndexByName [3]
LogTemp: ValueByName [3]
LogTemp: ValueByIndex [3]

注意点

実行結果からもわかるように、StaticEnum で情報を取得すると「Hoge_MAX」というのが追加されているのがわかります。

「Hoge_MAX」が必要ない場合は
UEnum::NumEnums() - 1 で for 文を回す等するようにしましょう。

もしサポート頂けたら いつか個人開発をする時に使わせて頂きます!