// GDnD wiki example // Demonstrates: a simple object pool for reusable 2D particles // Related pages: [[particle-systems-design]], [[overview-unity-nature-of-code-examples]] using System.Collections.Generic; using UnityEngine; public class ParticlePool2D : MonoBehaviour { [SerializeField] private Particle2D particlePrefab; [SerializeField] private int initialCapacity = 64; private readonly Stack available = new Stack(); private void Awake() { for (int i = 0; i < initialCapacity; i++) { available.Push(CreateInstance()); } } public Particle2D Get() { return available.Count > 0 ? available.Pop() : CreateInstance(); } public void Release(Particle2D particle) { particle.Deactivate(); particle.transform.SetParent(transform); available.Push(particle); } private Particle2D CreateInstance() { if (particlePrefab == null) { Debug.LogError("ParticlePool2D needs a Particle2D prefab."); return null; } Particle2D instance = Instantiate(particlePrefab, transform); instance.Deactivate(); return instance; } }