[UE4] 独自のアセットを実装する方法(5) アセットエディタを実装する

01.29

[UE4] 独自のアセットを実装する方法(5) アセットエディタを実装する はコメントを受け付けていません。

cb

また前回からの続きです。

今回は、自分で実装したアセットをダブルクリックした際に、独自のエディタウィンドウを開く方法をご紹介します。

 

1.既存の動作を確認する

まずは、そのままMyAssetをダブルクリックしてみます。

こんな感じのウィンドウが開くと思います。

特に自前で何も実装していない場合は、デフォルトでこのウィンドウが開くようになっています。

 

このウィンドウは FSimpleAssetEditor というクラスで実装されており、エンジンコードを探すと中身を見つけることが出来ます。

 

2.アセットエディタクラスを実装する

まずは、自前のアセットエディタクラスを実装する必要があります。

これは、IToolkitHostを継承している必要があります。

 

通常、FAssetToolkit を継承して作ると楽が出来ます。FSimpleAssetEditor も FAssetToolkit を継承して作られています。

今回は、さらに楽をして FSimpleAssetEditor を継承してアセットエディタを作ってしまおうと思います。

 

下記のcppとhを追加します。

MyAssetEditor.h
#pragma once
 
#include "UnrealEd.h"
#include "SimpleAssetEditor.h"
 
class FMyAssetEditor : public FSimpleAssetEditor
{
    public:
        static TSharedRef<FMyAssetEditor> CreateEditor(
            const EToolkitMode::Type Mode,
            const TSharedPtr< IToolkitHost >& InitToolkitHost,
            UObject* ObjectToEdit,
            FGetDetailsViewObjects GetDetailsViewObjects = FGetDetailsViewObjects()
            );
};
MyAssetEditor.cpp
#include "Blog_MyAsset.h"
#include "MyAssetEditor.h"
 
TSharedRef<FMyAssetEditor> FMyAssetEditor::CreateEditor(
    const EToolkitMode::Type Mode,
    const TSharedPtr< IToolkitHost >& InitToolkitHost,
    UObject* ObjectToEdit,
    FGetDetailsViewObjects GetDetailsViewObjects
)
{
    TSharedRef<FMyAssetEditor> NewEditor(new FMyAssetEditor());
 
    TArray<UObject*> ObjectsToEdit;
    ObjectsToEdit.Add( ObjectToEdit );
    NewEditor->InitEditor( Mode, InitToolkitHost, ObjectsToEdit, GetDetailsViewObjects );
 
    return NewEditor;
}

 

FSimpleAssetEditorと何も違いはありませんが、一応、自前のアセットエディタクラスが用意出来ました。

 

3.アセットエディタをAssetTypeActionsに登録する

次はこのアセットエディタを、UMyAssetクラスと紐付ける必要があります。

前回までに実装した、AssetTypeActions の OpenAssetEditor() という関数をオーバーライドすることで、対応したアセットのエディタを指定することが出来ます。

 

AssetTypeActions_MyAsset.h
class FAssetTypeActions_MyAsset : public FAssetTypeActions_Base
{
//~中略~
    virtual void OpenAssetEditor(
        const TArray<UObject*>& InObjects,
        TSharedPtr<class IToolkitHost> EditWithinLevelEditor = TSharedPtr<IToolkitHost>()
        ) override;
};
AssetTypeActions_MyAsset.cpp
#include "MyAssetEditor.h"
//~中略~

void FAssetTypeActions_MyAsset::OpenAssetEditor(
    const TArray<UObject*>& InObjects,
    TSharedPtr<class IToolkitHost> 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) 独自のシリアライズを実装する
  • このエントリーをはてなブックマークに追加

関連記事

コメントは利用できません。

カテゴリー

ページ上部へ戻る