BLOGブログ

2015.01.23UE4/C++

[UE4] 独自のアセットを実装する方法(3) 再インポートの実装

※ 2019/10/31追記:この記事は古くなっており、最新のバージョンでは動作しない可能性があります。

前回の記事で、独自のアセットを外部ファイルからインポートする方法をご紹介しました。

しかし、実際のゲームプロジェクトで使用する場合、一度のインポートで完結することは殆ど無いと思います。

 

やはり、繰り返しの調整に対応するため、再インポート機能に対応したいところです。

今回は、その実装方法をご紹介したいと思います。

 

1.Asset及びFactoryをReimportに対応する

 

まずは、MyAssetに再インポート用の情報を保存出来るように、UAssetImportDataを追加します。

このメンバはエディタでしか使用しませんので、#if WITH_EDITORONLY_DATAで囲っておきます。

 

次に、UMyAssetFactory::FactoryCreateText()でファイルをインポートした再に、ファイルパスとタイムスタンプを保存しておきます。

 

そして、このアセットが再インポート可能である、ということを示すため、UMyAssetFactoryの基底クラスにFReimportHandlerを追加し、CanReimport(),SetReimportPaths(),Reimport()の3つの関数を追加します。

ここから、先ほど追加したAssetImportDataを参照し、再インポート可能かどうかの判断が行われ、UFactory::StaticImportObject()の呼び出しを経由して再インポートが実行されます。

 

これで再インポートの準備は整いましたが、このままではアセットを右クリックしたメニューに、再インポートのための項目が登録されていません。

次はContentBrowserに、このアセットが再インポート可能だということを通知する必要があります。

 

2.AssetTypeActionsの追加

ContentBrowser上でアセットを右クリックした際に出てくるメニューを拡張するには、アセットに対応した AssetTypeActions クラスを実装する必要があります。

参照先モジュールに “AssetTools” を追加し、AssetTypeActionsクラスを実装します。

FAssetTypeActions_Baseクラスを継承し、自分のアセットの情報を登録します。

特に重要なのは、GetSupportedClass()で、ココでアセットの型情報を指定します。

 

今回は独自のアクションを追加する訳ではないので、 IsImportedAsset() をオーバーライドすれば、”Reimport”メニューが実装されます。

 

3.AssetTypeActionsをAssetToolsモジュールに登録

AssetTypeActionsクラスは、クラスを定義しただけでは動作してくれません。

AssetToolsモジュールへの登録を行う必要があります。

 

この登録は、通常、AssetTypeActionsを実装したモジュールのロード時に行います。

モジュールの初期化コードが書かれている、プロジェクトと同じ名前が付いているcppを↓のように編集します。

 

 

これで、モジュールのロード時に、AssetTypeActions_MyAssetが登録され、実際にContentBrowser上から再インポートが呼び出せるようになります。

 

実際に ImportSample.myasset の中身を書き換えて実行し、値が再読み込みされているのを確認してみて下さい。

 

コードばかりで長くなってしまいましたが、最後まで読んで頂き、ありがとうございました。 

次回は、今回追加したAssetTypeActionsを利用して、アセットに対する独自のアクションを実装してみます。

 

[UE4] 独自のアセットを実装する方法(1) アセットクラスの実装
[UE4] 独自のアセットを実装する方法(2) インポートの実装
[UE4] 独自のアセットを実装する方法(3) 再インポートの実装
[UE4] 独自のアセットを実装する方法(4) アセットにアクションを追加する
[UE4] 独自のアセットを実装する方法(5) アセットエディタを実装する
[UE4] 独自のアセットを実装する方法(6) 独自のシリアライズを実装する