#pragma once#include \"CoreMinimal.h\"#include \"UObject/NoExportTypes.h\"#include \"Engine/StreamableManager.h\"#include \"MapLoaderManager.generated.h\"UCLASS()class XXXPROJECT_API UMapLoaderManager : public UObject{GENERATED_BODY()private:// 单例核心(修正:移除拷贝构造函数的显式删除,解决C2535)UMapLoaderManager(); // 仅保留私有构造函数// 移除这行:UMapLoaderManager(const UMapLoaderManager&) = delete;static UMapLoaderManager* Instance;static FCriticalSection SingletonLock;public:static UMapLoaderManager* GetInstance();// 原有所有接口(不变)virtual ~UMapLoaderManager();void LoadMapSync(const FString& MapName);void LoadMapAsync(const FString& MapName);void LoadMapSeamless(const FString& MapName);bool IsMapValid(const FString& MapName) const;void OnAsyncMapLoaded(const FString& MapBaseName);private:// 原有所有私有成员(不变)FString CurrentLoadingMap;UPROPERTY()bool bIsLoading;FStreamableHandle* AsyncLoadHandle;FString GetValidMapPath(const FString& MapName) const;FString CurrentMapName;};
// 仅保留必要且兼容UE4.27的头文件#include \"MapLoaderManager.h\"#include \"Kismet/GameplayStatics.h\"#include \"Engine/World.h\"#include \"Misc/Paths.h\"#include \"Engine/Engine.h\"#include \"AssetRegistryModule.h\"#include \"Engine/StreamableManager.h\"// -------------------------- 单例静态成员初始化(新增) --------------------------UMapLoaderManager* UMapLoaderManager::Instance = nullptr;FCriticalSection UMapLoaderManager::SingletonLock;// 全局StreamableManager实例(原有保留)FStreamableManager GStreamableManager;// -------------------------- 单例全局访问接口实现(新增) --------------------------UMapLoaderManager* UMapLoaderManager::GetInstance(){// 线程安全锁:确保多线程下只创建一个实例FScopeLock Lock(&SingletonLock);if (Instance == nullptr){// 创建实例(UE4 UObject需通过NewObject创建,避免内存泄漏)Instance = NewObject();// 标记为永久对象:防止被GC回收(全局单例需常驻内存)Instance->AddToRoot();}return Instance;}// -------------------------- 原有构造函数(仅改访问权限为private,逻辑不动) --------------------------UMapLoaderManager::UMapLoaderManager(): Super(), bIsLoading(false), AsyncLoadHandle(nullptr){}// -------------------------- 原有析构函数(逻辑不动) --------------------------U