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

アセット レジストリ
EUWでContentsBrowser内のAssetを処理するのに必須といいほどのAsssetData構造体ですが、UE5で構造体の作りがUE5.1で変わったため不具合が発生します。 順々にエラーについて対処法を含めて説明していきます。
UE5.1にアップデートして不具合に対応する
UE5.1にプロジェクトをアップデートする
UE5.1にプロジェクトをアップデートするために、.uprojectファイルのバージョンを変更します。
.uprojectファイルを右クリック -> Switch Unreal Engine Version… -> UE5.1を選択 -> OKをクリック
プロジェクトを開きなおすとUEのバージョンがUE5.1に変更されています。
ゲームをプレイするとEUWでエラーが発生していると警告が表示されます。
EUWのボタンの処理を見に行くとAssetDataでエラーが起きていることが分かります。
「Object Path」が赤くなっているのでエラーの原因だということが分かります。
そして、「Asset Class Path」というピンが追加されています。
対処1:Object Pathの処理を外す
エラーになっている原因の「Object Path」の処理を外してCompileボタンをクリックするとエラーが無くなります。
エラーが直ったのでボタンをクリックしてもMaterialがリネームされません。
Logを確認するとPrintStringが出力されていません。 原因がAssetClassの判定がFalseの分岐に入っているようです。
対処2:AssetClassからAsstClassPath構造体のAssetNameに変更する
PrintStringをBranchの前に出して分岐する前に出力するように変更します。
AssetData構造体に追加されたAssetClassPath構造体の中身も調査するために出力します。
次のような結果が出力されます。
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
「Asset Class」には「None」が入っています。 「Asset Class」の代わりとなるのが、Asset Class Path構造体の「Asset Name」になります。 処理をAsset Class Path構造体の「Asset Name」でクラス名を判定するように変更します。
今度はボタンをクリックすると「Material」のみリネームされます。
Class Nameの「None」が返ってくる問題はObjectPathのように分かりやすくエラーが出る訳ではないので気付きづらかったです。
技術のコアになっている構造体やクラスの変数や関数がバージョンアップによって新しいものに切り替わることがあります。
小さいモジュールでサンプルコードを組んでおくとバージョンアップの際の問題に早く気付けます。