카테고리 없음
오브젝트 풀링(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);
}
}