From 65d68ed45fefd08642887d8cb058cad8399f5890 Mon Sep 17 00:00:00 2001 From: badlogic Date: Wed, 18 Oct 2023 18:18:04 +0200 Subject: [PATCH] [ue] Temporary (disabled) hack to get atlas and skeleton assets to display in content browsers. This doesn't work, as the UE editor thinks the assets are cooked. It also only loads assets that are referenced. As soon as the references no longer exist, the assets are unloaded. See #2368. --- .../SpinePlugin/Private/SpineAtlasAsset.cpp | 19 ++++++++----------- .../Private/SpineSkeletonDataAsset.cpp | 12 ++++++++++++ .../SpinePlugin/Public/SpineAtlasAsset.h | 4 +--- .../Public/SpineSkeletonDataAsset.h | 1 + 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp index b83e98918..d80d1e11a 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp @@ -52,24 +52,21 @@ void USpineAtlasAsset::PostInitProperties() { Super::PostInitProperties(); } -void USpineAtlasAsset::GetAssetRegistryTags(TArray &OutTags) const { - Super::GetAssetRegistryTags(OutTags); -} - void USpineAtlasAsset::Serialize(FArchive &Ar) { Super::Serialize(Ar); if (Ar.IsLoading() && Ar.UE4Ver() < VER_UE4_ASSET_IMPORT_DATA_AS_JSON && !importData) importData = NewObject(this, TEXT("AssetImportData")); } -FPrimaryAssetId USpineAtlasAsset::GetPrimaryAssetId() const { - return FPrimaryAssetId("spine-atlas", GetFName()); -} - void USpineAtlasAsset::PostLoadAssetRegistryTags(const FAssetData& InAssetData, - TArray& OutTagsAndValuesToUpdate) const -{ - UObject::PostLoadAssetRegistryTags(InAssetData, OutTagsAndValuesToUpdate); + TArray& OutTagsAndValuesToUpdate) const { + // FIXME: this is a massive hack. It will set the PackageFlags of the FAssetData + // in the AssetRegistry to PKG_FilterEditorOnly so the content browser displays it. + // This is necessary in UE 5.3 due to a regression in ContentBrowserAssetDataCore::IsPrimaryAsset + // See https://github.com/EsotericSoftware/spine-runtimes/issues/2368 + FAssetData& MutableAssetData = const_cast(InAssetData); + // MutableAssetData.PackageFlags = EPackageFlags::PKG_FilterEditorOnly; + UObject::PostLoadAssetRegistryTags(MutableAssetData, OutTagsAndValuesToUpdate); } #endif diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp index 808cac805..d95094bb9 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp @@ -80,6 +80,18 @@ void USpineSkeletonDataAsset::Serialize(FArchive &Ar) { LoadInfo(); } + +void USpineSkeletonDataAsset::PostLoadAssetRegistryTags(const FAssetData& InAssetData, + // FIXME: this is a massive hack. It will set the PackageFlags of the FAssetData + // in the AssetRegistry to PKG_FilterEditorOnly so the content browser displays it. + // This is necessary in UE 5.3 due to a regression in ContentBrowserAssetDataCore::IsPrimaryAsset + // See https://github.com/EsotericSoftware/spine-runtimes/issues/2368 + TArray& OutTagsAndValuesToUpdate) const { + FAssetData& MutableAssetData = const_cast(InAssetData); + // MutableAssetData.PackageFlags = EPackageFlags::PKG_FilterEditorOnly; + UObject::PostLoadAssetRegistryTags(MutableAssetData, OutTagsAndValuesToUpdate); +} + #endif void USpineSkeletonDataAsset::ClearNativeData() { diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h index 3a7aa24a5..b6a22a808 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineAtlasAsset.h @@ -36,7 +36,7 @@ // clang-format on UCLASS(BlueprintType, ClassGroup = (Spine)) -class SPINEPLUGIN_API USpineAtlasAsset : public UObject { +class SPINEPLUGIN_API USpineAtlasAsset : public UPrimaryDataAsset { GENERATED_BODY() public: @@ -70,9 +70,7 @@ protected: class UAssetImportData *importData; virtual void PostInitProperties() override; - virtual void GetAssetRegistryTags(TArray &OutTags) const override; virtual void Serialize(FArchive &Ar) override; - virtual FPrimaryAssetId GetPrimaryAssetId() const override; virtual void PostLoadAssetRegistryTags(const FAssetData& InAssetData, TArray& OutTagsAndValuesToUpdate) const override; #endif }; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h index dd23d8c9e..407c521e9 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h @@ -116,6 +116,7 @@ protected: virtual void PostInitProperties() override; virtual void GetAssetRegistryTags(TArray &OutTags) const override; virtual void Serialize(FArchive &Ar) override; + virtual void PostLoadAssetRegistryTags(const FAssetData& InAssetData, TArray& OutTagsAndValuesToUpdate) const override; #endif void LoadInfo();