π― Object Pool Plugin for Unreal Engine

Boost runtime performance by recycling Actors, Pawns, Characters, and Projectiles with this highly optimized Object Pool system for Unreal Engine.
π¦ Installation
Make sure the plugin is downloaded and enabled through the Epic Games Launcher.
π§± Pooled Classes
You must reparent your Blueprint classes to one of the specialized base classes provided by the plugin:
APooledActorAPooledPawnAPooledCharacter
These inherit Unrealβs default types and are fully compatible with the pooling system.

π Pool Lifecycle Events
Use these custom Blueprint events instead of the default BeginPlay and EndPlay:
OnPoolBeginPlayβ triggered when the instance is activated.OnPoolEndPlayβ triggered when the instance is returned to the pool.
These allow clean resets without destroying the object.

π§© Pool Components
Four component types are included:
| Component | Description |
|---|---|
UObjectPool |
Manages pooled APooledActor instances |
UPawnPool |
Manages pooled APooledPawn instances |
UCharacterPool |
Manages pooled APooledCharacter instances |
USharedObjectPool |
Manages multiple classes at once |

β οΈ Do NOT add a Pool Component to a class it spawns. This causes infinite recursion!
βοΈ Component Properties
Each Pool Component offers the following properties:
- Template Class: The Actor class to pool.
- Pool Size: Number of instances to preallocate.
- Auto Initialize: Automatically build pool on
BeginPlay.
Advanced flags:
ReinitializeInstancesInstantiateOnDemandNeverFailDeferredSpawnKeepOrphanActorsAlive

π§ Spawn Nodes (Blueprint)
Use the following Blueprint nodes to spawn actors from pool:
Spawn Actor from PoolSpawn Pawn from PoolSpawn Character from Pool
β οΈ As of v1.9.0, you must select the same class on both the Pool Component and the Spawn node.

π« Projectile Support
π« Default UE5 ProjectileMovement is NOT compatible with pooling.
Use the plugin's PooledProjectileComponent for pooled movement. For visual projectiles without simulation, use the PooledSplineProjectileComponent.

π Spline Projectiles
The PooledSplineProjectileComponent uses splines and sphere traces to simulate bullet travel without physics.
- Disable physics simulation
- Provide a spline to define the path
- Use CPU-based sphere traces for collisions

To apply spline logic to your pooled projectiles:
- Add a Spline Component to your level.
- Assign it to the
PooledSplineProjectileComponentinstance.

Once active, the bullet will automatically follow the assigned spline path.

β¨ Niagara Systems
To use Niagara effects with pooled actors:
- Set the Niagara Component β Force Solo to true
- This ensures GPU pooling is bypassed in favor of CPU-based pooling

π§ͺ C++ Developer API
Core Functions:
UFUNCTION(BlueprintCallable)
void InitializeObjectPool();
UFUNCTION(BlueprintCallable)
void EmptyObjectPool();
UFUNCTION(BlueprintCallable)
void GetObjectsFromPool(TArray<APooledActor*>& Spawned, TArray<APooledActor*>& Inactive);
UFUNCTION(BlueprintCallable)
APooledActor* GetInactiveObject();
UFUNCTION(BlueprintCallable)
static APooledActor* BeginDeferredSpawnFromPool(...);
UFUNCTION(BlueprintCallable)
static APooledActor* FinishDeferredSpawnFromPool(...);
Also includes templated utility methods:
template <typename T>
TArray<T*> GetObjectsFromPool() const;
All pool components follow the same API interface (
UObjectPool,UPawnPool,UCharacterPool,USharedObjectPool).
π§ Best Practices
- Use pooling for high-frequency spawning (bullets, enemies, FX).
- Avoid pooling for unique or persistent actors.
- Always return pooled actors using
ReturnActor()instead ofDestroyActor().