Unreal Engine プロジェクトの任意のアセットにメタデータを割り当てることができます。これによって、あとで利用する必要が生じる可能性がある特定のアセットについて、情報を記録できます。メタデータはキー/値のペアで、目的に合わせて自由に定義できます。
たとえば、アセットの製作者の名前、プロジェクト内での想定される用途、チームのワークフローにおけるアセットの状態 (進行中、完了、承認済みなど) などをメタデータに含めることができます。
一度設定したメタデータは、コンテンツ ブラウザでアセットをフィルタリングしたり、Unreal Editor で実行するブループリントまたは Python のスクリプトでアセットを指定したりするために使用できます。
このメタデータはプロジェクト内でアセットに割り当てられるため、実行時のゲームプレイ コードではメタデータには直接アクセスできません。メタデータは、Unreal Editor でのアセットの管理処理向けにスクリプティングを行う目的で主に使用することを意図しています。
一部のサードパーティ アプリケーションで作成したメタデータを、アセットと合わせて Unreal Editor にインポートすることもできます。FBX のインポート プロセスを通じて Unreal Engine にメタデータをインポートする方法については、「FBX アセット メタデータ パイプライン」を参照してください。
Unreal Editor の UI でのメタデータの使用
現時点では、Unreal Editor の UI ではメタデータを変更することはできませんが、アセットに割り当てられたメタデータを表示することはできます。また、メタデータのキーを使って、コンテンツ ブラウザで表示されるアセットをフィルタリングできます。
アセットのメタデータの表示
アセットに割り当てられたメタデータを表示するには、コンテンツ ブラウザでアセットを右クリックして、 [Asset Actions (アセットアクション)] - [Show Metadata] の順に選択します。

そのアセットに割り当てられたすべてのキーと値が一覧表示されます。

コンテンツ ブラウザでのフィルタリング
コンテンツ ブラウザで特定のメタデータ タグでアセットをフィルタリングする手順を次に示します。
-
メイン メニューから、 [Edit (編集)] - [Project Settings (プロジェクト設定)] の順に選択して、 [Project Settings (プロジェクト設定)] ウィンドウを開きます。
-
[Game (ゲーム)] - [Asset Manager] の順に選択して、 [Asset Registry] - [Metadata Tags For Asset Registry] 設定に移動します。 このリストに、アセットのフィルタリングに使用したいキーの名前を追加します。
クリックしてフルサイズで表示
-
コンテンツ ブラウザの [Filters (フィルタ)] バーで、タグの名前を入力して、
=
と続けてから、さらに検索する値を続けます。アセットの一覧が自動的にフィルタリングされて、指定したメタデータ タグがあり、そのタグの値が=
の後に入力した値と一致するアセットのみが表示されます。
アセットのメタデータの利用
まだインストールしていない場合、 Editor Scripting Utilities プラグインをインストールする必要があります。詳細については、「Unreal Editor のスクリプト処理と自動化」を参照してください。
アセットのメタデータの管理に必要なノードは、 [Editor Scripting] - [Metadata] カテゴリにあります。
これらのノードを使用するには、ブループリント クラスが、 PlacedEditorUtilityBase クラスなど、エディタのみのクラスから派生したものである必要があります。詳細については、「Scripting the Editor using Blueprints」を参照してください。
- メタデータを使用する前に、使用するアセットを読み込んでおく必要があります。そのために Editor Scripting - Load Asset ノードを使用できます。メタデータの値を設定または削除するには、変更を保持するために、Save Asset や Save Loaded Asset などのノードも使用する必要があります。
アセットのメタデータの取得
- 取得したいメタデータ キーの名前がわかる場合は、Get Metadata Tag ノードを使用できます。たとえば、次のスクリプトは、名前を指定した 1 つのタグの値を取得して、ビューポートに表示します。
画像をクリックしてフルサイズで表示
- また、 Get Metadata Tag Values ノードを使用して、すべてのメタデータをタグと値のペアのマップとして取得することもできます。たとえば、次のスクリプトは、アセットのすべてのメタデータを取得して、キーと値のそれぞれを順番にビューポートに出力します。
新しいメタデータ タグの設定
Set Metadata Tag ノードを使用します。次に例を示します。
画像をクリックしてフルサイズで表示
指定したタグ名がアセットのメタデータに存在しない場合、指定した値とともに追加されます。指定した名前のタグがすでに存在した場合、そのタグの値が更新されます。
既存のメタデータ タグの削除
Remove Metadata Tag ノードを使用して、削除するタグの名前を指定します。次に例を示します。
画像をクリックしてフルサイズで表示
アセットのメタデータ タグ すべて を削除するには、このノードをループで呼び出します。
画像をクリックしてフルサイズで表示
メタデータの管理に必要な関数は、unreal.EditorAssetLibrary
クラスにあります。
- メタデータを使用する前に、使用するアセットを読み込んでおく必要があります。
unreal.EditorAssetLibrary.load_asset(asset_path)
を使って、ファイル名を指定してプロジェクトのコンテンツにアセットを読み込むことができます。メタデータの値を設定または削除するには、変更を保持するために、unreal.EditorAssetLibrary.save_asset(asset_to_save)
やunreal.EditorAssetLibrary.save_loaded_asset(asset_to_save)
などの関数も使用する必要があります。
アセットのメタデータの取得
-
取得したいメタデータ キーの名前がわかる場合は、
get_metadata_tag(asset, tag_name)
関数を使用できます。たとえば、次のスクリプトは、名前を指定した 1 つのタグの値を取得して、ログに出力します。import unreal asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10" tag_name = "CreatedBy" loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name) value = unreal.EditorAssetLibrary.get_metadata_tag(loaded_asset, tag_name) if not value is "": unreal.log("Value of tag " + tag_name + " for asset " + asset_name + ": " + value)
-
get_metadata_tag_values(asset)
関数を使って、アセットに割り当てられたすべてのメタデータを辞書として取得することもできます。それから辞書のキーと値をループできます。たとえば、次のスクリプトは、アセットのすべてのメタデータを取得して、キーと値のそれぞれを順番にログに出力します。この辞書のキーは、実際には文字列ではなくunreal.Name
オブジェクトであることに注意してください。組み込みのstr()
関数を使えば、これらのオブジェクトを文字列に変換できます。import unreal asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10" loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name) all_metadata = unreal.EditorAssetLibrary.get_metadata_tag_values(loaded_asset) for tag_name, value in all_metadata.iteritems(): if not value is "": unreal.log("Value of tag " + str(tag_name) + " for asset " + asset_name + ": " + value)
新しいメタデータ タグの設定
set_metadata_tag(asset, tag_name, value)
関数を使用します。次に例を示します。
import unreal
asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10"
tag_name = "CreatedBy"
value_to_set = "My Name"
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
unreal.EditorAssetLibrary.set_metadata_tag(loaded_asset, tag_name, value_to_set)
unreal.EditorAssetLibrary.save_asset(asset_name)
指定したタグ名がアセットのメタデータに存在しない場合、指定した値とともに追加されます。指定した名前のタグがすでに存在した場合、そのタグの値が更新されます。
既存のメタデータ タグの削除
remove_metadata_tag(asset, tag_name)
関数を使用して、削除したいタグの名前を指定します。次に例を示します。
import unreal
asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10"
tag_name = "CreatedBy"
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
unreal.EditorAssetLibrary.remove_metadata_tag(loaded_asset, tag_name)
unreal.EditorAssetLibrary.save_asset(asset_name)
アセットのメタデータ タグすべてを削除するには、この関数をループで呼び出します。
import unreal
asset_name = "/Game/ProductViewer/SampleMesh/Gears/Transmission_part_10"
tag_name = "CreatedBy"
loaded_asset = unreal.EditorAssetLibrary.load_asset(asset_name)
all_metadata = unreal.EditorAssetLibrary.get_metadata_tag_values(loaded_asset)
for tag_name in all_metadata:
unreal.EditorAssetLibrary.remove_metadata_tag(loaded_asset, tag_name)
unreal.EditorAssetLibrary.save_asset(asset_name)