diff --git a/Source/CesiumRuntime/Private/CesiumCreditSystem.cpp b/Source/CesiumRuntime/Private/CesiumCreditSystem.cpp index 9ee39cedf..56ee5a870 100644 --- a/Source/CesiumRuntime/Private/CesiumCreditSystem.cpp +++ b/Source/CesiumRuntime/Private/CesiumCreditSystem.cpp @@ -21,7 +21,6 @@ #include "Modules/ModuleManager.h" #endif -/*static*/ UObject* ACesiumCreditSystem::CesiumCreditSystemBP = nullptr; namespace { /** @@ -89,17 +88,6 @@ FName ACesiumCreditSystem::DEFAULT_CREDITSYSTEM_TAG = /*static*/ ACesiumCreditSystem* ACesiumCreditSystem::GetDefaultCreditSystem(const UObject* WorldContextObject) { - // Blueprint loading can only happen in a constructor, so we instantiate a - // loader object that retrieves the blueprint class in its constructor. We can - // destroy the loader immediately once it's done since it will have already - // set CesiumCreditSystemBP. - if (!CesiumCreditSystemBP) { - UCesiumCreditSystemBPLoader* bpLoader = - NewObject(); - CesiumCreditSystemBP = bpLoader->CesiumCreditSystemBP.LoadSynchronous(); - bpLoader->ConditionalBeginDestroy(); - } - UWorld* world = WorldContextObject->GetWorld(); // This method can be called by actors even when opening the content browser. if (!IsValid(world)) { @@ -154,8 +142,11 @@ ACesiumCreditSystem::GetDefaultCreditSystem(const UObject* WorldContextObject) { spawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; spawnParameters.OverrideLevel = world->PersistentLevel; - pCreditSystem = world->SpawnActor( - Cast(CesiumCreditSystemBP), + UCesiumCreditSystemBPLoader* bpLoader = + GEngine->GetEngineSubsystem(); + UClass* CesiumCreditSystemBP = + Cast(bpLoader->CesiumCreditSystemBP.LoadSynchronous()); + CesiumCreditSystemBP, spawnParameters); // Null check so the editor doesn't crash when it makes arbitrary calls to // this function without a valid world context object. diff --git a/Source/CesiumRuntime/Private/CesiumCreditSystemBPLoader.h b/Source/CesiumRuntime/Private/CesiumCreditSystemBPLoader.h index f9a7fa1b8..92c91050f 100644 --- a/Source/CesiumRuntime/Private/CesiumCreditSystemBPLoader.h +++ b/Source/CesiumRuntime/Private/CesiumCreditSystemBPLoader.h @@ -2,10 +2,12 @@ #pragma once +#include + #include "CesiumCreditSystemBPLoader.generated.h" UCLASS() -class UCesiumCreditSystemBPLoader : public UObject { +class UCesiumCreditSystemBPLoader : public UEngineSubsystem { GENERATED_BODY() public: diff --git a/Source/CesiumRuntime/Public/CesiumCreditSystem.h b/Source/CesiumRuntime/Public/CesiumCreditSystem.h index 3163788fd..eb28f3add 100644 --- a/Source/CesiumRuntime/Public/CesiumCreditSystem.h +++ b/Source/CesiumRuntime/Public/CesiumCreditSystem.h @@ -75,8 +75,6 @@ class CESIUMRUNTIME_API ACesiumCreditSystem : public AActor { #endif private: - static UObject* CesiumCreditSystemBP; - /** * A tag that is assigned to Credit Systems when they are created * as the "default" Credit System for a certain world.