BLOGブログ

2022.12.28UE5UE/ C++UE/ Editor拡張

[UE5] Map 型変数のキー重複問題

執筆バージョン: Unreal Engine 5.1

皆さんこんにちは。エンジニアの森です

今回の記事では以下のように、Map 型変数にいくらでもデフォルト値のキーを追加できるようにします

今日の目標

今日の目標

 


Map 型とは

Map 型とは整数や文字列などハッシュ可能な値をキーにして任意の値と紐づけできる型のことです

Setという重複を許さない配列も用意されています

BP上では以下のようにDetailsウィンドウから型選択できます

Map 型選択

Map 型選択

ドキュメントはこちらです

Blueprint Sets

Blueprint Maps

マップを使用する

Set を使用して作業する

ドキュメントにも書かれていることですが、いざ使ってみようと思うと以下のようなエラーが出ます

Cannot add a new key to the map while a key with the default value exists

Cannot add a new key to the map while a key with the default value exists

Duplicate keys are not allowed in Map properties.

Duplicate keys are not allowed in Map properties.

今日はエンジンを改造することでこの問題に対処します


エラーが出ている箇所

まずは、このエラーが出ている場所を探します

エディター上にメッセージが表示されているので、これをソースコード上で検索しましょう

エラーメッセージを探す

エラーメッセージを探す

場所が特定できました

「{Engine格納場所}\Engine\Source\Editor\PropertyEditor\Private\PropertyHandleImpl.cpp」です

エンジンバージョンは「5.1.0-0+++UE5+Release-5.1」を使用しています


エンジン改造

ソースコードの変更内容は以下

ガードしている部分を無くしました

警告を表示している部分のはそのまま残しているので、警告ウィンドウは出てきます

結果を確認しましょう↓

キーが同じでも許された

キーが同じでも許された

同じキーを持つ値をいくらでも追加できるようなりました

ランタイムでもキーを取得できます↓

キーを探すときは、エディター上で一番下に見えている値が取得できるようです


これで完了です

UE4.27 でこの部分のソースコードは同じでした(同じ改造もできました)

エンジン改造は自己責任でお願いします

ありがとうございました

おまけ

マップのキーに使えるHash可能な型とは、ここにあるようにoperator==とGetTypeHash関数をサポートしている型のことです

記事のおまけとしてコード例を置いておきます