Object pooling in Unreal Engine Blueprint: stop spawn and destroy

Spawning and destroying the same projectile or hit effect on every shot repeats work a pool can skip. A pool keeps released actors hidden and reuses them. Steps in Blueprint:

  1. Where you call Spawn Actor from Class for a bullet, effect or pickup, ask the pool for an actor instead and pass the transform there.
  2. Where you call Destroy Actor, release it to the pool. A release must hide the actor, switch off collision and tick, stop movement, and clear its timers and Delay nodes. Skipping the last one is the usual bug: an old Delay fires on a reused actor.
  3. BeginPlay runs only when the actor is first created. Move per-use setup (health, random mesh, target) into an event the pool calls on every acquire.
  4. Cap the number of inactive actors so the pool can’t grow forever, and prewarm during loading so the first shots don’t spawn anything.
  5. Compare before and after with stat unit or Unreal Insights on your own actors. The gain depends on how heavy the actor is.

I packaged these steps as a plugin, PoolKit (I make it). Spawn Actor From Pool and Release Actor To Pool do steps 1 to 4 with no manager actor or base class, and it also pools widgets, sounds, Niagara systems, decals and mesh components. UE 5.4 to 5.8. It ships as source code, so the project must be able to build C++ (Visual Studio installed).

Fab: PoolKit - Object Pooling & Actor Pooling System: Widgets, Niagara, Multiplayer | Fab
Video: https://youtu.be/2hze7wfWvCs