Chapter 21

◽ 💬 アセットの情報の取得

ポコ太郎
ポコ太郎
2022.01.05に更新

アセットから情報を取得する際の2つの型の違い

📘 Get Selected Assets

https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/Development/Editor/GetSelectedAssets/
今までの解説で何度も登場した「📘 Get Selected Assets」は、コンテンツブラウザ上で選択中のアセットの情報(Object Reference 型)を得るための関数です。

Object Reference は各アセットのクラス型にキャストすることで、プロパティの Get/Set が可能になります(キャストはデータ型の変換と思っておけば良いかと思います)。

また Object Reference から情報を取得する「📗 Get」関数がいくつか用意されています。

要素名 型 得られる情報
Display Name String T_noise
Object Name String T_noise
Outer Name Object /Game/EditorUtility/Textures/T_noise
Path Name String /Game/EditorUtility/Textures/T_noise.T_noise
System Path String エクスプローラ上のフルパス
Class Object Class Reference Texture2D
Print String でログに出力した場合

📘 Get Selected Asset Data

https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/Development/Editor/GetSelectedAssetData/
「📘 Get Selected Asset Data」はコンテンツブラウザ上で選択中のアセットが持つ「構造体(型が異なる複数の値 / Asset Data Structure 型)」を取得する関数です。

「💠 Break AssetData」で要素を分離して Name 型で取り出すことができます。

つまり Asset Data Structure から直接クラス型にキャストできませんが「📗 Get Asset」で Object Reference を取得すればキャストが可能になります。

要素名 型 得られる情報
Object Path Name /Game/EditorUtility/Textures/T_noise.T_noise
Package Name Name /Game/EditorUtility/Textures/T_noise
Package Path Name /Game/EditorUtility/Textures
Asset Name Name T_noise
Asset Class Name Texture2D
Print String でログに出力した場合

アセットをコピーした際のテキスト情報

例えば「T_noise」という名前のテクスチャがこちらのパスに存在するとします。
/Game/EditorUtility/Textures/T_noise

コンテンツブラウザ上でアセットを選択して「Ctrl + C」でクリップボードに情報をコピーしてテキストエディタ等にペーストしてみると、中身はこちらのような情報だと分かります。
Texture2D'/Game/EditorUtility/Textures/T_noise.T_noise

先頭にアセットのクラス型が記述されていて、アセットのパスの最後には同じ名前がドットを挟んで二回繰り返されていますが、こちらは「Display Name.Object Name」になるようです。

Display Name と Object Name の違い

公式ドキュメントでコンテンツブラウザ上のアセット名を得るのに 📗 Get Display Name が使われていますが、コンテンツブラウザ上のアセットの情報を取得する点ではどちらでも良さそうです。

一方でレベル上のアクターの名前を得る場合には違いが現れます。
詳しくはこちらのページ内で取り上げていますのでご覧ください。

AssetRegistry

UE がアセットの情報を非同期的に管理しているシステムのようですが、とりあえず言えるのは AssetRegistry はコンテンツブラウザ内の全アセットの情報を保持しているもののようです。

https://shuntaendo.hatenablog.com/entry/2017/09/02/155015
https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/ProgrammingWithCPP/Assets/Registry/

その他のアセット情報の取得関数

アセットが持つ構造体の情報を取得する際の大事なことはこちらに丁寧に解説されています。

📘 Get Assets by Class

https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AssetRegistry/GetAssetsbyClass_InterfaceCall/
クラスを指定してアセットを Asset Data Structure 型で取得。

📘 Get Assets by Path

https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AssetRegistry/GetAssetsbyPath_InterfaceCall/
Package Path からアセットを Asset Data Structure 型で取得。
  • Recursive ‥ サブフォルダ以下のアセットも対象にするか
  • IncludeOnlyOnDiskAssets ‥ ディスク上に保存されたアセットのみ取得するか

📘 Get Assets by Object Path

https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AssetRegistry/GetAssetbyObjectPath_InterfaceCa-/
Object Path からアセットを Asset Data Structure 型で取得。

📘 Get Assets

https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AssetRegistry/GetAssets_InterfaceCall/

📘 Get All Assets

https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AssetRegistry/GetAllAssets_InterfaceCall/
プロジェクト内の全てのアセットを Asset Data Structure 型で取得。

実際のプロジェクトで扱う際には大量のアセットへのアクセスと編集してしまう可能性から、細心の注意を払わないといけなさそうです。

📘 Load Asset

https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/EditorScripting/Asset/LoadAsset/
コンテンツブラウザ内のアセットのパス(/Game で始まり Display Name で終わるパス)を指定して Object Reference 型で取得します。