PoolHelper<T>

A global pool manager for regular objects with empty constructors.

If you need it for GameObjects take a look at the non-generic PoolHelper.

Usage

Spawning

SomeClass someObject = PoolHelper<SomeClass>.Spawn();

Despawning

PoolHelper<SomeClass>.Despawn(someObject);

You can also despawn objects after a delay:

// despawns after 1 sec in scaled time
PoolHelper<SomeClass>.Despawn(someObject, 1f);

// unscaled time
PoolHelper<SomeClass>.Despawn(someObject, 1f, true);

Examples

Simple bullet pool

public class Bullet
{
    public Vector3 Position;
    public Vector3 Velocity;
    public event Action<Bullet, object> Impact;

    void Update()
    {
        Position += Velocity * Time.deltaTime;

        if (weHitSomething)
            Impact(this, whatWeHit);
    }
}

public class Gun
{
    Vector3 muzzlePosition;
    Vector3 direction;
    float bulletSpeed = 5;
    float bulletLifeTime = 10;

    void Fire()
    {
        var bullet = PoolHelper<Bullet>.Spawn();
        bullet.Position = muzzlePosition;
        bullet.Velocity = direction * bulletSpeed;
        bullet.Impact += OnImpact;

        // despawn the bullet after a delay if it hasn't already been despawned
        PoolHelper<Bullet>.Despawn(bullet, bulletLifeTime);
    }

    void OnImpact(Bullet bullet, object otherObject)
    {
        bullet.Impact -= OnImpact;
        PoolHelper<Bullet>.Despawn(bullet);
    }
}