fc2ブログ

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

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

PREV | PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++で「Enum」を「foreach」を使ったループ文で連続した値を処理する(UENUM、TEnumRange、ENUM_RANGE_BY_COUNT)

C++で「Enum」を「foreach」を使ったループ文で連続した値を処理する方法です。

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

・enumをインデックスとした便利な配列の作り方
https://qiita.com/Naotsun/items/3036a2c450f10d2ba300

ENUM_RANGE_BY_COUNTマクロはUENUMをforeachで簡単に回せるTEnumRangeというクラステンプレートを使うために定義しています。

こちらについてとなります。

「TEnumRange」については以下でも色々と説明されていますが、
今回はその中の「ENUM_RANGE_BY_COUNT」を使って順番に処理する方法です。

・Iterating over UENUM with TEnumRange
https://benui.ca/unreal/iterate-over-enum-tenumrange/

というわけで実際に使ってみます。

まずは「UENUM」を定義します。
今回は「ENUM_RANGE_BY_COUNT 」を使うので連続した値である必要があります。

// ENUM_RANGE_BY_COUNT を使うための Enum を定義
UENUM(BlueprintType)
enum class ENewEnumCount : uint8
{

One = 0,
Two = 1,
Three = 2,
Count = 3 UMETA(Hidden),

};
ENUM_RANGE_BY_COUNT(ENewEnumCount, ENewEnumCount::Count);

「ENUM_RANGE_BY_COUNT」は
第一引数で指定した「Enum」を第二引数で指定した値まで連続で処理するためのものになります。

上記の「Enum」を「TEnumRange」を使って連続した値を順番に処理する記述はこんな感じになります。

// Enum の数だけ処理を行う
// ENUM_RANGE_BY_COUNT() を使った処理
for(ENewEnumCount aEnum : TEnumRange< ENewEnumCount>()){

// ログを出力
UE_LOG(LogTemp, Log, TEXT("%d"), static_cast< int32>(aEnum) );
}


結果はこんな感じになりました。
ENUM_RANGE_BY_001.jpg

最初の値と最後の値を指定するだけの使い方なので結構使う頻度は多くなるのかなと思います。

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

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/756-ae12815e

TRACKBACK

PREV | PAGE-SELECT | NEXT