1. Home
  2. /
  3. Study
  4. /
  5. UE5 [EUW]5.1のAssetData構造体の変更対応について

UE5 [EUW]5.1のAssetData構造体の変更対応について

UE5 [EUW]5.1のAssetData構造体の変更対応について

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のように分かりやすくエラーが出る訳ではないので気付きづらかったです。
技術のコアになっている構造体やクラスの変数や関数がバージョンアップによって新しいものに切り替わることがあります。
小さいモジュールでサンプルコードを組んでおくとバージョンアップの際の問題に早く気付けます。

関連記事

UE5 [EUW]5.2のAssetData構造体の変更対応について(再び)

UE5 [EUW]5.2のAssetData構造体の変更対応について(再び)

UE5.2のAssetData構造体の変更対応について 5.2でもAssetData構造体の作りが変わりました。 5.1から5.2にプロジェクトをアップデートする際には、「EUWでAssetDataを使っている処理」について見直してください。 5.0から5.1で以下のような不具合が発生しました。 メンバー変数「ObjectPath」が無くなったことで使用しているとエラーになる Class Nameが「None」を返す
UE5から追加された新Widget ComboBox(Key)

UE5から追加された新Widget ComboBox(Key)

ComboBox(Key)について UE5からComboBox(Key)が追加されました。 公式ドキュメントにもフォーラムにも使用方法が書かれていなかったので調査してみました。 ComboBox(Key)ではComboBoxのItemにWidgetを使用できます。 アイコンとTextを持ったUserWidgetをItemにするサンプルを紹介します。 ComboBox(Key)の使い方について 今回はEdito