UnrealEngine創建自定義資產類型


導語

這篇文章記錄了將UObject實例保存在Asset文件的方法,用這個方法可以將自定義的UObject數據序列化保存到文件,可以用於自定義UE資源類型。

創建UObject類

這一步比較簡單,按照正常的方式創建C++類即可。

在這里我創建一個簡單的UCustomAsset派生自UObject,包含一個Value字段作為演示。

UCLASS()
class LEARNUI_API UCustomAsset final : public UObject
{
	GENERATED_BODY()
public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FString Value;
};

創建Asset

這一步是為了在Content窗口中添加右鍵菜單,像創建其他Asset一樣快速創建CustomAsset。主要分為兩步,創建對應的Factory和TypeAction類。

創建MyDataFactory

MyDataFactory中包含了具體的生成UObject實例的實現,我們接下來創建的Asset是由Factory實例化出來的。

UCLASS()
class LEARNUIEDITOR_API UMyDataFactory final : public UFactory
{
	GENERATED_BODY()
public:
	UMyDataFactory(){
        // 指定是否可以通過菜單來創建
        bCreateNew = true;
        // 創建Asset之后是否自動打開編輯
        bEditAfterNew = true;
        // 指定支持的類型
        SupportedClass = UMyData::StaticClass();
    }
    // 重載FactoryCreateNew方法,創建UMyData實例
	virtual UObject* FactoryCreateNew(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override{
	    return NewObject<UMyData>(InParent, InName, Flags);
    }
};

創建MyDataTypeAction

FMyDataTypeAction定義了Asset的顯示名稱、類型、顯示顏色和所在分類。

// 至少需要重載以下四個方法
class FMyDataTypeAction final : public FAssetTypeActions_Base
{
public:
	virtual FText GetName() const override;
	virtual UClass* GetSupportedClass() const override;
	virtual FColor GetTypeColor() const override;
	virtual uint32 GetCategories() override;
};

以上代碼中,GetCategories可以返回引擎中已經注冊的Category,也可以使用以下代碼注冊自己的Category。

Category = FAssetToolsModule::GetModule().Get().RegisterAdvancedAssetCategory(FName("Custom"), FText::FromString("Custom"));

需要使用FAssetToolsModule注冊FMyDataTypeAction以使其生效。

IAssetTools& AssetTool = FAssetToolsModule::GetModule().Get();

// 創建TypeAction實例並存儲起來,方便在合適的時候調用UnregisterAssetTypeActions反注冊
AssetTypeActions.Emplace(MakeShared<FMyDataTypeAction>());

for (TSharedPtr<FAssetTypeActions_Base> AssetType : AssetTypeActions)
{
	AssetTool.RegisterAssetTypeActions(AssetType.ToSharedRef());
}

效果

在ContentBrowser的Add/Import菜單中,可以看到自定義的MyData類型。

創建完成后,雙擊打開編輯窗口,可以修改UProperty字段的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM