Object pooling is a technique used to lower the performance cost of spawning actors during gameplay by spawning a set number of actors beforehand. When an actor is needed during gameplay, instead of spawning a new one, the developer can simply ask one that has already been spawned and stored in the pool that is not currently active and set key properties for it (such as location, rotation, materials, etc..).
This plugin is a really basic implmentation that is intended to be expanded upon without requiring any c++ change, everything is exposed to blueprint.
A main actor that manage every pool you want to create need to be placed in the level, then assign each pool you want in the array.
Every pool manage objects with very simple behaviours through the use of 2 blueprint events and 1 function that need to be called to return actors to the pool:
SetActorActive: Execute behaviour to get the actor you want (for example the niagara system, the location, rotation, etc.).
SetActorInactive: Restore the data of the actor before hiding it from the level.
PoolActor: Is the function that need to be called when the actor is 'expired'(such as when a particle has ended, or an actor timer has expired).