fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++で列挙型(Enum)を文字列(FString、標準文字列)に変換する(GetNameStringByIndex)

C++で列挙型(Enum)を文字列に変換する方法です。

こちらを参考にさせていただきました。

・UE4 Unreal C++でのEnumとStringの変換について
https://papersloth.hatenablog.com/entry/2019/05/14/232132

こんな感じで列挙型を作りました。

// サンプルの列挙型
UENUM(BlueprintType)
enum class EEnumSample : uint8
{
  SampleNone = 0,
  SampleOne = 1,
  SampleTwo = 2,
};


この列挙型の値を文字列に変換してみます。
結果的にはこんな感じになります。

// 文字列に変換したい列挙型の値と定義
EEnumSample  aEnumValue = EEnumSample::EnumSampleOne;
FString  aEnumTypeString(TEXT("EEnumSample"));

// 列挙型の値を FString に変換
const TCHAR*  aEnumChar = *aEnumTypeString;
UEnum* const  aEnum = FindObject(ANY_PACKAGE, aEnumChar);
FString  aEnumString = aEnum->GetNameStringByIndex(static_cast(aEnumValue));

// FString を標準文字列に変換
std::string  aPrintString("EEnumSample = ");
aPrintString += TCHAR_TO_ANSI(*aEnumString);


箇所ごとの説明はこちら。
まずは文字列に変換したい列挙型の値と列挙型の定義名を「FString」で用意します。

// 文字列に変換したい列挙型の値と定義
EEnumSample  aEnumValue = EEnumSample::EnumSampleOne;
FString  aEnumTypeString(TEXT("EEnumSample"));


次に上記列挙型の値を「FString」に「GetNameStringByIndex」関数を使って変換します。
「GetNameStringByIndex」は「UEnum」クラスを「FindObject」を使って取得してから使います。

// 列挙型の値を FString に変換
const TCHAR*  aEnumChar = *aEnumTypeString;
UEnum* const  aEnum = FindObject(ANY_PACKAGE, aEnumChar);
FString  aEnumString = aEnum->GetNameStringByIndex(static_cast(aEnumValue));


最後に「FString」を標準文字列に変換して終了です。

// FString を標準文字列に変換
std::string  aPrintString("EEnumSample = ");
aPrintString += TCHAR_TO_ANSI(*aEnumString);

上記はとりあえず「imGUI」で表示するために必要だったので記載しました。

結果はこんな感じになります。
Enumを文字列に変換000
無事列挙型の値の名前が変換できているようです。

マクロをつくって簡単に取得する方法もあるようです。

・EnumToString Macro
https://unrealcommunity.wiki/enumtostring-macro-6ukt6cyz

#define GETENUMSTRING(etype, evalue) ( (FindObject(ANY_PACKAGE, TEXT(etype), true) != nullptr) ? FindObject(ANY_PACKAGE, TEXT(etype), true)->GetEnumName((int32)evalue) : FString("Invalid - are you sure enum uses UENUM() macro?") )


こういった機能はあまりゲーム制作に直接かかわるわけではないですが、
デバッグ機能だったりの確認するときには必ず必要になりそうなので覚えておきたいところです。

| UE4 | 10:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/651-87088ee7

TRACKBACK

PREV | PAGE-SELECT | NEXT