UnrealEngine建立自定義資產型別

jeferwang發表於2022-04-16

導語

這篇文章記錄了將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型別。

UnrealEngine建立自定義資產型別

建立完成後,雙擊開啟編輯視窗,可以修改UProperty欄位的值。

UnrealEngine建立自定義資產型別

相關文章