Unity오브젝트와 프리팹

오브젝트 풀링 기본

총알, 이펙트처럼 자주 생성과 제거가 반복되는 오브젝트를 재사용하는 Unity 풀링 기본 패턴입니다.

마지막 수정 2026년 3월 19일

기본 패턴

csharp
GameObject item = pool[index];
item.SetActive(true);

설명

  • 오브젝트 풀링은 필요할 때마다 InstantiateDestroy를 반복하지 않고, 미리 만들어 둔 오브젝트를 껐다 켰다 하며 재사용하는 방식입니다.
  • 총알, 폭발 이펙트, 데미지 숫자처럼 짧은 생명주기를 자주 반복하는 대상에 잘 맞습니다.
  • 초기 생성 비용과 런타임 성능을 맞바꾸는 전략이므로, 너무 큰 풀을 무조건 만드는 것도 좋은 선택은 아닙니다.
  • 풀에서 꺼낼 때는 상태 초기화가 함께 이뤄져야 재사용 버그가 줄어듭니다.

짧은 예제

csharp
[SerializeField] private GameObject bulletPrefab;
private readonly List<GameObject> pool = new();

private GameObject GetBullet()
{
    foreach (GameObject item in pool)
    {
        if (!item.activeSelf)
        {
            item.SetActive(true);
            return item;
        }
    }

    GameObject created = Instantiate(bulletPrefab);
    pool.Add(created);
    return created;
}

빠른 정리

항목설명
사전 생성미리 오브젝트를 준비
재사용비활성 오브젝트를 다시 활성화
성능생성/삭제 비용과 GC 부담 완화
상태 초기화위치, 속도, 타이머를 다시 맞춤
적용 대상총알, 이펙트, UI 숫자 등

주의할 점

풀링은 만능 최적화가 아닙니다. 재사용할 때 상태를 제대로 초기화하지 않으면 이전 사용 흔적이 남아 디버깅이 더 어려워질 수 있습니다.

참고 링크

2 sources