효율적이고 재사용 가능한 유니티 오브젝트 풀링 시스템입니다. 이 시스템은 Unity의 내장 ObjectPool<T>를 기반으로 하며, 게임 오브젝트의 생성/파괴 비용을 최소화하고 메모리 관리를 최적화합니다.
- 💡 Unity의 내장
IObjectPool<T>인터페이스 활용 - 🔄 자동 확장/축소되는 동적 풀 크기 관리
- 🎯 제네릭 기반의 타입 안전성
- 🔒 스레드 세이프한 풀 관리
- 📝 상세한 로깅 시스템
- 🚀 컴포넌트 캐싱을 통한 성능 최적화
시스템은 세 개의 핵심 클래스로 구성됩니다:
- ObjectPoolManager: 전역 풀 관리자
- PooledObject: 풀링 가능한 오브젝트의 기본 클래스
- IPoolable: 풀링 인터페이스
- 이 저장소를 클론하거나 다운로드합니다.
- 세 개의 스크립트 파일을 Unity 프로젝트의 적절한 위치에 복사합니다:
ObjectPoolManager.csPooledObject.csIPoolable.cs
// Bullet.cs
public class Bullet : PooledObject<Bullet>
{
public override void OnSpawn()
{
// 총알이 풀에서 꺼내질 때의 초기화 로직
}
public override void OnDespawn()
{
// 총알이 풀로 돌아갈 때의 정리 로직
}
}void Start()
{
// 풀 매니저 초기화
Managers.Pool.Init();
}public class BulletSpawner : MonoBehaviour
{
[SerializeField] private Bullet bulletPrefab;
private IObjectPool<Bullet> bulletPool;
void Start()
{
// 풀 가져오기 (초기 용량: 20, 최대: 100)
bulletPool = Managers.Pool.GetPool(bulletPrefab, 20, 100);
}
void SpawnBullet()
{
// 풀에서 총알 가져오기
Bullet bullet = bulletPool.Get();
// 총알 사용...
}
}defaultCapacity: 풀의 초기 크기 (기본값: 10)maxSize: 풀의 최대 크기 (기본값: 100)
Init(): 풀 매니저 초기화GetPool<T>(): 지정된 프리팹의 오브젝트 풀 반환
ReturnToPool(): 오브젝트를 풀로 반환OnSpawn(): 풀에서 꺼낼 때 호출OnDespawn(): 풀로 반환할 때 호출
- Unity 2021.1 이상
- C# 7.0 이상
- 풀링할 오브젝트는 반드시
PooledObject<T>를 상속받아야 합니다. OnSpawn()과OnDespawn()메서드를 반드시 구현해야 합니다.- 파생 클래스에서
Awake()를 오버라이드할 때는base.Awake()를 호출해야 합니다.
- 컴포넌트 참조 캐싱으로
GetComponent호출 최소화 - 풀 크기의 동적 관리로 메모리 사용 최적화
- 스레드 세이프한 작업 처리
MIT License
- 이 저장소를 포크합니다
- 새 브랜치를 생성합니다
- 변경사항을 커밋합니다
- 브랜치에 푸시합니다
- Pull Request를 생성합니다
문제가 발생하거나 제안사항이 있으시다면 이슈를 생성해 주세요.