[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 文を回す等するようにしましょう。
もしサポート頂けたら いつか個人開発をする時に使わせて頂きます!