ObjectPoolManager는 Unity에서 오브젝트 풀링을 쉽게 관리할 수 있도록 도와주는 클래스입니다. 기존의 Instantiate와 Destroy 함수를 대체하여 성능을 향상시킬 수 있습니다. 아래는 ObjectPoolManager의 사용 방법과 예시입니다.
풀링할 프리팹에 포함될 스크립트는 MonoBehaviour 대신 ObjectPoolEntry<A>를 상속해야 합니다. 여기서 <A>는 오브젝트를 구분할 ID의 타입입니다.
using DDObjectPool;
public class MyPooledObject : ObjectPoolEntry<int>
{
public override void initializeObject()
{
// 오브젝트 초기화 코드 작성
}
}
initializeObject() 메소드에 대한 설명역할: 이 메소드는 오브젝트가 풀에 반환될 때 호출되며, 오브젝트의 상태를 초기화하는 데 사용됩니다.
사용 예시:
선택적 구현: 모든 프리팹이 초기화가 필요한 것은 아니므로, 필요한 경우에만 이 메소드를 구현하면 됩니다.
예시 코드:
public override void initializeObject()
{
// 애니메이션 상태 리셋
animator.Rebind();
animator.Update(0f);
// 변수 초기화
health = maxHealth;
isActive = false;
}
ObjectPoolManager 인스턴스를 생성하고 초기화합니다.
using DDObjectPool;
public class GameManager : MonoBehaviour
{
public Transform creativeArea; // 오브젝트가 생성될 부모 Transform
private ObjectPoolManager<MyPooledObject, int> objectPool;
void Start()
{
objectPool = new ObjectPoolManager<MyPooledObject, int>();
objectPool.initialize(creativeArea, this);
}
}
오브젝트를 생성할 때는 Instantiate 함수를 사용합니다. 이 함수는 풀에서 사용 가능한 오브젝트를 가져오거나, 없으면 새로 생성합니다.
public void CreateObject(MyPooledObject prefab)
{
MyPooledObject newObject = objectPool.Instantiate(prefab);
// 추가 설정이 필요하면 여기서 수행
}
오브젝트를 사용한 후에는 Destroy 함수를 사용하여 풀에 반환합니다.
public void DestroyObject(MyPooledObject instance)
{
objectPool.Destroy(instance);
}