関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2015.01.29UE4UE/ C++
※ 2019/10/31追記:この記事は古くなっており、最新のバージョンでは動作しない可能性があります。
また前回からの続きです。
今回は、自分で実装したアセットをダブルクリックした際に、独自のエディタウィンドウを開く方法をご紹介します。
まずは、そのままMyAssetをダブルクリックしてみます。
こんな感じのウィンドウが開くと思います。
特に自前で何も実装していない場合は、デフォルトでこのウィンドウが開くようになっています。
このウィンドウは FSimpleAssetEditor というクラスで実装されており、エンジンコードを探すと中身を見つけることが出来ます。
まずは、自前のアセットエディタクラスを実装する必要があります。
これは、IToolkitHostを継承している必要があります。
通常、FAssetToolkit を継承して作ると楽が出来ます。FSimpleAssetEditor も FAssetToolkit を継承して作られています。
今回は、さらに楽をして FSimpleAssetEditor を継承してアセットエディタを作ってしまおうと思います。
下記のcppとhを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include "CoreMinimal.h" #include "UnrealEd.h" #include "SimpleAssetEditor.h" /** * */ class BLOG_MYASSET_API FMyAssetEditor : public FSimpleAssetEditor { public: static TSharedRef CreateEditor( const EToolkitMode::Type Mode, const TSharedPtr< IToolkitHost >& InitToolkitHost, UObject* ObjectToEdit, FGetDetailsViewObjects GetDetailsViewObjects = FGetDetailsViewObjects() ); }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include "MyAssetEditor.h" #include "Blog_MyAsset.h" TSharedRef FMyAssetEditor::CreateEditor( const EToolkitMode::Type Mode, const TSharedPtr< IToolkitHost >& InitToolkitHost, UObject* ObjectToEdit, FGetDetailsViewObjects GetDetailsViewObjects ) { TSharedRef NewEditor(new FMyAssetEditor()); TArray<UObject*> ObjectsToEdit; ObjectsToEdit.Add(ObjectToEdit); NewEditor->InitEditor(Mode, InitToolkitHost, ObjectsToEdit, GetDetailsViewObjects); return NewEditor; } |
FSimpleAssetEditorと何も違いはありませんが、一応、自前のアセットエディタクラスが用意出来ました。
次はこのアセットエディタを、UMyAssetクラスと紐付ける必要があります。
前回までに実装した、AssetTypeActions の OpenAssetEditor() という関数をオーバーライドすることで、対応したアセットのエディタを指定することが出来ます。
1 2 3 4 5 6 7 8 9 |
class BLOG_MYASSET_API FAssetTypeActions_MyAsset : public FAssetTypeActions_Base { //~中略~ virtual void OpenAssetEditor( const TArray<UObject*>& InObjects, TSharedPtr EditWithinLevelEditor = TSharedPtr() ) override; }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include "AssetTypeActions_MyAsset.h" #include "Blog_MyAsset.h" #include "MyAsset.h" #include "MyAssetEditor.h" //追加 //~中略~ void FAssetTypeActions_MyAsset::OpenAssetEditor( const TArray<UObject*>&InObjects, TSharedPtr EditWithinLevelEditor ) { for (int i = 0; i < InObjects.Num(); ++i) { FMyAssetEditor::CreateEditor( EToolkitMode::Standalone, EditWithinLevelEditor, InObjects[i]); } } |
これで、ContentBrowser上でMyAssetをダブルクリックした際に、FMyAssetEditorが開くようになりました。
このままでは、デフォルトの状態と全く違いはありませんが・・・
今回、アセットエディタの中身の実装までご紹介したかったのですが、話の本筋から逸れてしまうのと、Slateのコードは非常に長くなってしまうため、アセットエディタの話はここまでとさせて頂きます。
独自のアセットエディタの実装については、FSimpleAssetEditorがとても良いサンプルになりますので、まずはこのコードを解析してみることをオススメします。
Slate UI については、また別の機会にお話し出来ればと思います。
この記事を書いている時点ではまだ少ないですが、ヒストリアブログのSlate関連の記事はこちらから検索出来ます。
次回は、アセット実装の最終回、独自のシリアライズを実装して、UPROPERTY化出来ないメンバのセーブ/ロードに対応する方法をご紹介したいと思います。
[UE4] 独自のアセットを実装する方法(1) アセットクラスの実装
[UE4] 独自のアセットを実装する方法(2) インポートの実装
[UE4] 独自のアセットを実装する方法(3) 再インポートの実装
[UE4] 独自のアセットを実装する方法(4) アセットにアクションを追加する
[UE4] 独自のアセットを実装する方法(5) アセットエディタを実装する
[UE4] 独自のアセットを実装する方法(6) 独自のシリアライズを実装する