|
11 | 11 |
|
12 | 12 | UObjectPool::UObjectPool()
|
13 | 13 | {
|
14 |
| - PrimaryComponentTick.bCanEverTick = true; |
| 14 | + PrimaryComponentTick.bCanEverTick = false; |
15 | 15 | }
|
16 | 16 |
|
17 | 17 |
|
@@ -41,19 +41,28 @@ void UObjectPool::AddActorsToPool(int const ActorsNumber,
|
41 | 41 | {
|
42 | 42 | if(PoolActor && ActorsNumber > 0)
|
43 | 43 | {
|
| 44 | + FActorSpawnParameters SpawnParameters; |
| 45 | + SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; |
44 | 46 | for (int i = 0; i < ActorsNumber; i++)
|
45 | 47 | {
|
46 |
| - AActor* SpawnedActor = GetWorld()->SpawnActor<AActor>(PoolActor, FVector().ZeroVector, FRotator().ZeroRotator); |
47 |
| - SpawnedActor->SetActorHiddenInGame(true); |
48 |
| - SpawnedActor->SetActorEnableCollision(false); |
49 |
| - |
50 |
| - InactiveActors.Add(SpawnedActor); |
| 48 | + AActor* SpawnedActor = GetWorld()->SpawnActor<AActor>(PoolActor, FVector().ZeroVector, FRotator().ZeroRotator, SpawnParameters); |
| 49 | + if(SpawnedActor) |
| 50 | + { |
| 51 | + SpawnedActor->SetActorHiddenInGame(true); |
| 52 | + SpawnedActor->SetActorEnableCollision(false); |
| 53 | + SpawnedActor->SetActorTickEnabled(false); |
| 54 | + |
| 55 | + InactiveActors.Add(SpawnedActor); |
| 56 | + } |
| 57 | + else |
| 58 | + { |
| 59 | + Branch = EOutputStates::Failed; |
| 60 | + return; |
| 61 | + } |
51 | 62 | }
|
52 |
| - |
53 | 63 | Branch = EOutputStates::Success;
|
54 | 64 | return;
|
55 | 65 | }
|
56 |
| - |
57 | 66 | Branch = EOutputStates::Failed;
|
58 | 67 | return;
|
59 | 68 | }
|
@@ -85,7 +94,7 @@ void UObjectPool::SpawnActorFromPool(const FTransform SpawnTransform, AActor* Ow
|
85 | 94 | PoolActorToSpawn->SetInstigator(Instigator);
|
86 | 95 | PoolActorToSpawn->SetActorHiddenInGame(false);
|
87 | 96 | PoolActorToSpawn->SetActorEnableCollision(true);
|
88 |
| - SpawnedActor->SetActorTickEnabled(true); |
| 97 | + PoolActorToSpawn->SetActorTickEnabled(true); |
89 | 98 |
|
90 | 99 | InactiveActors.Remove(PoolActorToSpawn);
|
91 | 100 | ActiveActors.Add(PoolActorToSpawn);
|
@@ -126,7 +135,7 @@ bool UObjectPool::HasPoolFreeActor() const
|
126 | 135 |
|
127 | 136 | void UObjectPool::ReturnActorToPool(AActor* Actor)
|
128 | 137 | {
|
129 |
| - if(ActiveActors.Find(Actor)) |
| 138 | + if(ActiveActors.Contains(Actor)) |
130 | 139 | {
|
131 | 140 | Actor->SetActorHiddenInGame(true);
|
132 | 141 | Actor->SetActorEnableCollision(false);
|
|
0 commit comments