46 UE_LOG(LogTemp, Error, TEXT(
"GetPoolItem failed: InClass is null."));
50 TArray<AActor*>* Pool =
PoolMap.Find(InClass);
51 if (Pool && Pool->Num() > 0)
53 AActor* Actor = Pool->Pop();
54 Actor->SetActorLocationAndRotation(Location, Rotator);
56 Actor->SetActorHiddenInGame(
false);
57 Actor->SetActorEnableCollision(
true);
58 Actor->SetActorTickEnabled(
true);
63 if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull))
64 return World->SpawnActor<AActor>(InClass, Location, Rotator);
71 if ( Actor ==
nullptr )
74 Actor->SetActorHiddenInGame(
true);
75 Actor->SetActorEnableCollision(
false);
76 Actor->SetActorTickEnabled(
false);
79 if (UWorld* World = Actor->GetWorld())
81 World->GetTimerManager().ClearAllTimersForObject(Actor);
83 Actor->SetLifeSpan(0.f);
85 if (UProjectileMovementComponent* Proj = Actor->FindComponentByClass<UProjectileMovementComponent>())
87 Proj->StopMovementImmediately();
90 if (UCharacterMovementComponent* CharMove = Actor->FindComponentByClass<UCharacterMovementComponent>())
92 CharMove->StopMovementImmediately();
93 CharMove->Velocity = FVector::ZeroVector;
95 if (UPrimitiveComponent* Prim = Cast<UPrimitiveComponent>(Actor->GetRootComponent()))
97 Prim->SetPhysicsLinearVelocity(FVector::ZeroVector,
true);
98 Prim->SetPhysicsAngularVelocityInDegrees(FVector::ZeroVector,
true);
99 Prim->PutRigidBodyToSleep();
102 TSubclassOf<AActor> ActorClass = Actor->GetClass();
103 TArray<AActor*>& Pool =
PoolMap.FindOrAdd(ActorClass);