All posts
postMay 6, 2026

Object Pooling — Stop Instantiating

#csharp#unity#performance#object-pooling
Object Pooling — Stop Instantiating — slide 1
csharp
using System.Collections.Generic;
using UnityEngine;

public class BulletPool : MonoBehaviour
{
    [SerializeField] private GameObject prefab;
    [SerializeField] private int size = 20;
    private Queue<GameObject> _pool = new();

    private void Awake()
    {
        for (int i = 0; i < size; i++)
        {
            var obj = Instantiate(prefab);
            obj.SetActive(false);
            _pool.Enqueue(obj);
        }
    }

    public GameObject Get()
    {
        if (_pool.Count == 0) return Instantiate(prefab);  // overflow
        var obj = _pool.Dequeue();
        obj.SetActive(true);
        return obj;
    }

    public void Return(GameObject obj)
    {
        obj.SetActive(false);
        _pool.Enqueue(obj);
    }
}