카테고리 없음

오브젝트 풀링(Object Pooling)

rxo2 2025. 4. 15. 20:28

오브젝트 풀링( Object Pooling )은

게임 오브젝트를 필요할 때마다 생성하고 파괴하는 대신, 미리 만들어 놓고 재활용하는 방식.

반복적인 생성과 삭제는 프레임 드랍의 원인!.

풀링은 메모리 재사용 -> 성능 향상 효과가 큼.

 

기존 방식                                                           풀링 방식

적 생성: Instantiate() 적을 풀에서 꺼냄
적 죽음: Destroy() 적을 풀에 다시 넣음
계속 새로 생성 미리 만든 걸 계속 재사용

 

 

유니티가 제공하는 공식 풀링 시스템 (Unity 2021 이상)

using UnityEngine.Pool;

ObjectPool<GameObject> pool = new ObjectPool<GameObject>(
    createFunc: () => Instantiate(prefab),
    actionOnGet: obj => obj.SetActive(true),
    actionOnRelease: obj => obj.SetActive(false),
    actionOnDestroy: obj => Destroy(obj),
    collectionCheck: false,
    defaultCapacity: 10
);

 

 

간단한 사용 예시

public class ObjectPool : MonoBehaviour
{
    public GameObject prefab;
    private Queue<GameObject> pool = new Queue<GameObject>();

    public GameObject GetObject()
    {
        if (pool.Count > 0)
        {
            var obj = pool.Dequeue();
            obj.SetActive(true);
            return obj;
        }
        else
        {
            return Instantiate(prefab);
        }
    }

    public void ReturnObject(GameObject obj)
    {
        obj.SetActive(false);
        pool.Enqueue(obj);
    }
}