Asset Status

This is another attempt of mine to learn more about the unreal engine editor. The idea is to create a way to set a “status” on an asset and then being able to filter it out using custom filters. It’s based on studying colleagues code and Unreal Engines editor extensions.

Preview

Asset Status

Assigning Asset Status using RMB menu


Asset Status

Once asset status is assigned, you can use the newly added filters to isolate them in the asset browser

Asset Status System – Unreal Editor Plugin

This plugin adds asset development tagging functionality directly into the Unreal Editor’s Content Browser.

1. Asset Status Enum Definition

Purpose: Defines asset lifecycle stages.

UENUM(BlueprintType)
enum class EAssetStatus : uint8
{
    None UMETA(DisplayName = "None"),
    Whitebox UMETA(DisplayName = "Whitebox"),
    WIP UMETA(DisplayName = "WIP"),
    Final UMETA(DisplayName = "Final"),
    DoNotUse UMETA(DisplayName = "Do not use"),
    Count UMETA(Hidden)
};

2. Setting Asset Status Metadata

Purpose: Writes and persists metadata to identify asset state.

void UAssetAction::SetAssetStatus(UObject* Asset, EAssetStatus Status)
{
    if (!Asset) return;

    FString StatusString = GetStatusAsString(Status);
    UPackage* Package = Asset->GetOutermost();
    UMetaData* MetaData = Package->GetMetaData();

    MetaData->SetValue(Asset, TEXT("AssetStatus"), *StatusString);
    Package->MarkPackageDirty();

    if (!UEditorAssetLibrary::SaveLoadedAsset(Asset))
    {
        UE_LOG(LogTemp, Error, TEXT("Failed to save asset %s"), *Asset->GetName());
    }

    FAssetRegistryModule::AssetCreated(Asset);
}

3. Context Menu Extension for Asset Status

Purpose: Adds right-click functionality in Content Browser for status tagging.

4. Setting Status from Context Menu

Purpose: Assigns status to all selected assets.

void FBUtilitiesModule::SetSelectedAssetsStatus(EAssetStatus Status, const TArray<FAssetData>& SelectedAssets)
{
    for (const FAssetData& AssetData : SelectedAssets)
    {
        UObject* Asset = AssetData.GetAsset();
        if (Asset)
        {
            UAssetAction::SetAssetStatus(Asset, Status);
        }
    }
}

5. Adding Asset Status Filters

Purpose: Enables filtering by development stage in the Content Browser.

CustomFiltersInstance->AddFrontEndFilterExtensions(CustomCategory, FilterExtensions);

6. Filter Matching with Asset Status

Purpose: Filters assets based on their metadata tag.

Assets are shown only if their AssetStatus matches the filter’s target value.