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

01.20

[UE4] 独自のアセットを実装する方法(2) インポートの実装 はコメントを受け付けていません。

cb

前回の記事では、独自のアセットを実装し、ContentBrowser上から作成する方法をご紹介しました。

今回はその続きで、外部ファイルをインポートしてアセットを作成する方法をご紹介したいと思います。

 

1.準備

今回のサンプルでは、”.myasset”という拡張子のカンマ区切りテキストファイルから、3つの整数を ValueA, ValueB, ValueC プロパティに対して読み込む、ということにしたいと思います。

まずはインポートするファイルを用意します。

ImportSample.myasset
1,22,333

2.Factoryをインポートに対応する

前回のコードを、下記のように書き換えます。変更の無い箇所は省略しています。

UCLASS()
class UMyAssetFactory : public UFactory
{
//~中略~//
virtual UObject* FactoryCreateText(
UClass* InClass,
UObject* InParent,
FName InName,
EObjectFlags Flags,
UObject* Context,
const TCHAR* Type,
const TCHAR*& Buffer,
const TCHAR* BuferEnd,
FFeedbackContext* Warn
) override;
};

 

UMyAssetFactory::UMyAssetFactory(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
    SupportedClass = UMyAsset::StaticClass();
    bCreateNew = false;
    bEditorImport = true;
    bText = true;
    Formats.Add(TEXT("myasset;My Asset"));
}

UObject* UMyAssetFactory::FactoryCreateText(
    UClass* InClass,
    UObject* InParent,
    FName InName,
    EObjectFlags Flags,
    UObject* Context,
    const TCHAR* Type,
    const TCHAR*& Buffer,
    const TCHAR* BuferEnd, FFeedbackContext* Warn
    )
{
    TArray<FString> Values;
    FString(Buffer).ParseIntoArray(&Values, TEXT(","), true);

    UMyAsset* NewMyAsset = 
        CastChecked<UMyAsset>(StaticConstructObject(InClass, InParent, InName, Flags));
    if(NewMyAsset && (3 <= Values.Num()))
    {
        NewMyAsset->ValueA = FCString::Atoi(*Values[0]);
        NewMyAsset->ValueB = FCString::Atoi(*Values[1]);
        NewMyAsset->ValueC = FCString::Atoi(*Values[2]);
    }

    return NewMyAsset;
}

 

コンストラクタで、bCreateNew=false; bEditorImport=true; とすることで、インポートでのアセット作成に対応します。

(理由は不明ですが、1つのUFactoryで新規作成とインポートの両立は出来ないみたいです。UFactory::StaticImportObject()の実装を参照)

また、bText=true;とすることで、テキストファイルからのインポートを指定します。

bText=false;とした場合は、FactoryCreateText()ではなく、FactoryCreateBinary()を実装する必要があります。

 

Formatsに文字列を追加し、ファイルの拡張子と説明文を指定します。

 

新規作成は FactoryCreateNew()で実装しましたが、テキストファイルからのインポートは FactoryCreateText()で実装します。

引数Buffer~BufferEndで示される領域に、ファイルから読み込んだ文字列が格納されています。

こちらを文字列処理でパースして、作成した NewMyAsset のメンバに値を反映します。

 

これで、最初に用意した ImportSample.myasset を ContentBrowser にドラッグ&ドロップすることで、ファイルのインポートが実現します。

インポートして作成されたアセットをダブルクリックして、ValueA, ValueB, ValueC に値が格納されていることを確認してみて下さい。

 
[UE4] 独自のアセットを実装する方法(1) アセットクラスの実装
[UE4] 独自のアセットを実装する方法(2) インポートの実装

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

[UE4] 独自のアセットを実装する方法(4) アセットにアクションを追加する

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

[UE4] 独自のアセットを実装する方法(6) 独自のシリアライズを実装する

  • このエントリーをはてなブックマークに追加

関連記事

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

カテゴリー

ページ上部へ戻る