UE5.2のAssetData構造体の変更対応について
5.2でもAssetData構造体の作りが変わりました。 5.1から5.2にプロジェクトをアップデートする際には、「EUWでAssetDataを使っている処理」について見直してください。
5.0から5.1で以下のような不具合が発生しました。
- メンバー変数「ObjectPath」が無くなったことで使用しているとエラーになる
- Class Nameが「None」を返すのでClassで分岐しているところの処理が走らなくなる
5.1で対応したClass名を取得する処理に影響が出ます。
- 5.1でClass名を取得できた「Asset Class Path | Asset Name」が無くなりました
- Class Nameは「None」を返すのでClass名は取得できない
UE5.1でMaterialをリネームする処理を作成する
[/Game/Materials]にある「Material」と「MaterialInstance」の「Material」のみリネームするEUWのボタンを作成します。
ボタンの処理は以下のようなBlueprintを実装します。
ボタンをクリックすると「Material」のみ「M_Material」にリネームされます。
「AssetData構造体」の中身を調べるようなPrintStringを実装します。
次のような結果が出力されます。
Package Name : /Game/Materials/SampleMaterial
Package Path : /Game/Materials
Asset Name : SampleMaterial
Asset Class : None
Asset Class Path | Package Name : /Script/Engine
Asset Class Path | Asset Name : Material
「GetAssetRegistry」のFunction「Get Assets by Path」では指定したフォルダのAssetに関する情報が入っている「AssetData構造体」の配列が取得できます。
「Asset Class」には「None」が入っています。 「Asset Class」の代わりとなるのが、Asset Class Path構造体の「Asset Name」になります。 処理をAsset Class Path構造体の「Asset Name」でクラス名を判定するように変更します。 「Asset Name」が「Material」か判定すれば、「Material」のみを処理できます。

アセット レジストリ
EUWでContentsBrowser内のAssetを処理するのに必須といいほどのAsssetData構造体ですが、UE5で構造体の作りがUE5.0からUE5.1で変更がありましたが、UE5.2でも「Asset Class Path」ピンの中身が変更になったのでClass名の取得方法に変更がありました。
UE5.2にアップデートして不具合に対応する
UE5.2にプロジェクトをアップデートする
UE5.1にプロジェクトをアップデートするために、.uprojectファイルのバージョンを変更します。
.uprojectファイルを右クリック -> Switch Unreal Engine Version… -> UE5.2を選択 -> OKをクリック
プロジェクトを開きなおすとUEのバージョンがUE5.2に変更されています。
「EUW_Rename」を開いてCompileすると「構造体を再びBreakしてください」というような内容の警告が表示されます。
「AssetData」構造体の「Asset Class Path」ピンをBreakして「Top Level Asset Path」構造体を確認すると、構造体の変数が変更されていることが分かります。
「Top Level Asset Path」構造体の変数に変更があったため、5.1で実装したClass名の判定処理が使用できなくなります。
新しくなった「Top Level Asset Path」構造体の変数を含めて「AssetData」構造体の中身を確認します。
次のような結果が出力されます。
Package Name : /Game/Materials/M_Material
Package Path : /Game/Materials
Asset Name : M_Material
Asset Class : None
Asset Class Path | Path String : /Script/Engine.Material
Class名を取得する2つの方法
Class名を取得する方法は2つあります。
- Path情報からファイルの拡張子としてClass名を取得する
- AssetData構造体から「GetClass」ノードでClass名を取得する
「Asset Class Path | Path String」でClassのPath情報が取得できます。 Path情報からファイルの拡張子としてClass名を取得できます。 StringのSplitノードから「Extension Part」で拡張子が取得できます。
「AssetData」構造体から「Get Class」ノードを呼び出し、「Get Class Display Name」を呼び出すとClass名を取得できます。
PrintStringでClass名を出力できるか確認します。
次のような結果が出力されます。
Package Name : /Game/Materials/M_Material
Package Path : /Game/Materials
Asset Name : M_Material
Asset Class : None
Asset Class Path | Path String : /Script/Engine.Material
Asset Class Path | Path String | Extension Part : Material
Get Class | Get Display Name : Material
Class名の判定処理を修正します。
5.2でもClass名を指定してリネームできました。
「AssetData」構造体の「Get Class」ノードは5.0から存在するので、Class名を取得したい場合は「Get Class」ノードから取得した方が今後のアップデートにも対応できそうです。
引き続きバージョンアップによる不具合についてはBlogの方で更新します。