69{
70 if (!ActorClass || !GetWorld())
71 {
72 return nullptr;
73 }
74
76 AActor* SpawnedActor = nullptr;
77
79 {
81 if (IsValid(SpawnedActor))
82 {
83 break;
84 }
85 SpawnedActor = nullptr;
86 }
87
88 if (!SpawnedActor)
89 {
91 bool bCanExpand = true;
92
93 if (Settings && Settings->
PoolMaps.Contains(ActorClass))
94 {
95 bCanExpand = Settings->
PoolMaps[ActorClass].bCanExpand;
96 }
97
98 if (bCanExpand)
99 {
101 }
102 else
103 {
104 LOG_WARNING(LogCK,
"%s 풀 부족으로 더 이상 스폰 불가능" , *ActorClass->GetName())
105 return nullptr;
106 }
107 }
108
109 if (SpawnedActor)
110 {
111 SpawnedActor->SetActorLocationAndRotation(Location, Rotation);
112 SpawnedActor->SetActorHiddenInGame(false);
113 SpawnedActor->SetActorTickEnabled(true);
114 SpawnedActor->SetActorEnableCollision(true);
115
117 {
118 IObjectPoolingInterface::Execute_OnSpawnFromPool(SpawnedActor);
119 }
120 }
121
122 return SpawnedActor;
123}
#define LOG_WARNING(Category, Format,...)
Definition CK_UE.h:31
Definition ObjectPoolSettings.h:27
TMap< TSubclassOf< AActor >, FPoolSettings > PoolMaps
Definition ObjectPoolSettings.h:32
TMap< TSubclassOf< AActor >, FObjectPool > ObjectPools
Definition PoolWorldSubsystem.h:38
AActor * CreateActorAndSetup(TSubclassOf< AActor > ActorClass, UWorld *World)
Definition PoolWorldSubsystem.cpp:44
Definition PoolWorldSubsystem.h:11
TArray< TObjectPtr< AActor > > InactiveActors
Definition PoolWorldSubsystem.h:16