PoolHelper¶
A global pool manager for GameObjects.
If you need it for regular objects take a look at the generic version PoolHelper<T>.
Usage¶
Spawning¶
SomeMonobehaviour somePrefabInstance = PoolHelper.Spawn<SomeMonobehaviour>(myPrefab);
Despawning¶
PoolHelper.Despawn(somePrefabInstance);
You can also despawn objects after a delay:
// despawns after 1 sec in scaled time
PoolHelper.Despawn(somePrefabInstance, 1f);
// unscaled time
PoolHelper.Despawn(somePrefabInstance, 1f, true);
Examples¶
Simple bullet pool¶
public class Bullet : MonoBehaviour, IPoolable
{
public Vector3 Position;
public Vector3 Velocity;
public event Action<Bullet, Collider> Impact;
void Update()
{
Position += Velocity * Time.deltaTime;
}
void OnTriggerEnter(Collider otherCollider)
{
Impact(this, otherCollider);
}
void IPoolable.OnSpawned()
{
}
void IPoolable.OnDespawned()
{
// reset state
Position = Vector3.zero;
Velocity = Vector3.zero;
Impact = null;
}
}
public class Gun : MonoBehaviour
{
public float BulletSpeed = 5;
public float BulletLifeTime = 10;
public Bullet BulletPrefab;
void Fire()
{
var bullet = PoolHelper.Spawn(BulletPrefab);
bullet.Position = transform.position;
bullet.Velocity = transform.forward * BulletSpeed;
bullet.Impact += OnImpact;
// despawn the bullet after a delay if it hasn't already been despawned
PoolHelper.Despawn(bullet, BulletLifeTime);
}
void OnImpact(Bullet bullet, Collider otherCollider)
{
// inflict damage or something
PoolHelper.Despawn(bullet);
}
}