# Is it possible to add custom asset category for custom Data Asset?

**URL:** <https://forums.unrealengine.com/t/is-it-possible-to-add-custom-asset-category-for-custom-data-asset/105162>\
**Category:** C++\
**Tags:** unreal-engine\
**Created:** [January 17, 2018, 3:39pm UTC](https://forums.unrealengine.com/t/is-it-possible-to-add-custom-asset-category-for-custom-data-asset/105162 "2018-01-17T15:39:41Z")\
**Posts on this page:** 1\
**Showing post:** 2

<div class="post-metadata">

**Author:** ![BrUnO\_XaVIeR](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/bruno_xavier/32/1110230_2.png) [@BrUnO\_XaVIeR](https://forums.unrealengine.com/u/BrUnO_XaVIeR)\
**Post date:** [January 18, 2018, 10:40pm UTC](https://forums.unrealengine.com/t/is-it-possible-to-add-custom-asset-category-for-custom-data-asset/105162/2 "2018-01-18T22:40:17Z")

</div>

Yes, it´s possible for any UObject; you just have to create an asset factory for your custom class:

[![](https://i.imgur.com/Ztf1LEE.png) ](https://i.imgur.com/Ztf1LEE.png)

In runtime module:

```auto

#include "Runtime/Engine/Classes/Engine/DataAsset.h"

USTRUCT()
struct FMyItemInfo{

    GENERATED_USTRUCT_BODY()

    UPROPERTY(EditAnywhere)
    FString itemName;

    UPROPERTY(EditAnywhere)
    UTexture2D* itemThumbnail;

    UPROPERTY(EditAnywhere)
    UBlueprint* itemBlueprint;

    UPROPERTY(EditAnywhere)
    FColor itemColor;
};

UCLASS(ClassGroup = Synaptech, Category = "Synaptech", BlueprintType, Blueprintable)
class USQLITE_API UMyItemsDatabase : public UDataAsset
{
    GENERATED_BODY()

    UPROPERTY(EditAnywhere)
    TArray<FMyItemInfo> items;

};

```

In Editor module:

```auto

static EAssetTypeCategories::Type MY_AssetCategory;

UCLASS()
class UMYEDITOR_API UMyItemsDatabase_Factory : public UFactory {
    GENERATED_UCLASS_BODY()
protected:
    virtual bool IsMacroFactory() const { return false; }
public:
    virtual UObject* FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn) override;
};

```

.H:

```auto

class FATA_UMyItemsDatabase : public FAssetTypeActions_Base {
public:
    virtual FText GetName() const override { return LOCTEXT("MyDataAsset","My Items Data Asset"); }
    virtual uint32 GetCategories() override { return MY_AssetCategory; }
    virtual FColor GetTypeColor() const override { return FColor(127,255,255); }
    virtual FText GetAssetDescription(const FAssetData &AssetData) const override { return LOCTEXT("MyDataAssetDesc","My DataAsset description."); }
    virtual UClass* GetSupportedClass() const override { return UMyItemsDatabase::StaticClass(); }
};

```

.CPP:

```auto

UMyItemsDatabase_Factory::UMyItemsDatabase_Factory(const class FObjectInitializer &OBJ) : Super(OBJ) {
    SupportedClass = UMyItemsDatabase::StaticClass();
    bEditAfterNew = true;
    bCreateNew = true;
}

UObject* UMyItemsDatabase_Factory::FactoryCreateNew(UClass* Class, UObject* InParent, FName Name, EObjectFlags Flags, UObject* Context, FFeedbackContext* Warn)
{
    check(Class->IsChildOf(UMyItemsDatabase::StaticClass()));
    return NewObject<UMyItemsDatabase>(InParent,Class,Name,Flags|RF_Transactional,Context);
}

```

Then the key step you have to take is within your Editor Module’s _StartupModule()_ function:

```auto

StartupModule() {
    IAssetTools &AssetTools = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools").Get();
    MY_AssetCategory = AssetTools.RegisterAdvancedAssetCategory(FName(TEXT("MyCustomCategory")),LOCTEXT("MyCustomCategory","MyCustomCategory"));
    {
        TSharedRef<IAssetTypeActions> ACT_UMyItemsDatabase = MakeShareable(new FATA_UMyItemsDatabase);
        AssetTools.RegisterAssetTypeActions(ACT_UMyItemsDatabase);
    }
}

```

---

_[View the full topic](https://forums.unrealengine.com/t/is-it-possible-to-add-custom-asset-category-for-custom-data-asset/105162)._
