본문 바로가기

내일 배움 캠프/TIL

[내일 배움 캠프] 52일차 TIL

[Unity 오브젝트 풀(Pooling) 시스템]

목적

    ● 자주 생성되는 UI/몬스터/이펙트 등 오브젝트를 재사용하여 GC와 Instantiate 비용 최소화

    ● ObjectPool<T> 기반으로 안정성과 커스터마이징 확보

    ● Unity 특유의 Destroy된 부모 참조로 인한 예외까지 구조적으로 차단

 

핵심 설계 요약

항목 설명
PoolManager 모든 프리팹 풀을 중앙에서 관리하는 매니저
Pool 특정 프리팹 하나에 대한 풀 (IObjectPool<GameObject>)
OnCreate() 오브젝트 생성 및 Root에 초기 배치
OnRelease() 오브젝트 비활성화 + 안전한 부모(Root)로 이동
Push() 풀에 반납, go.activeSelf 체크로 중복 방지
Pop() 풀에서 꺼냄, 예외 없이 사용 가능

 

이 구조의 장점

항목 장점
커스터마이즈 기능 Unity의 IObjectPool<T> 사용으로 콜백 네 가지를 제어 가능 (OnCreate, OnGet 등)
안정성 Push 시 SetParent(Root) 처리로 부모 참조 문제 해결
일관성 있는 트리 구성 모든 풀링 객체는 @프리팹명Pool GameObject 하위에 정리
중앙 집중 관리 PoolManager를 통해 모든 풀을 관리하고 Clear, Preload 등 확장 용이
가벼운 의존성 MonoBehaviour 상속 없이 순수 C# 객체로 풀 관리 가능