오브젝트 풀
오브젝트 풀(Object Pool)은 게임 개발에서 자주 사용되는 디자인 패턴 중 하나로, 오브젝트의
생성과 소멸을 최소화하여 성능을 향상시키는 방법입니다. 주로 게임 내에서 빈번하게 생성되고
삭제되는 오브젝트를 미리 생성해두고, 필요할 때마다 재활용하여 메모리 할당 및 해제 오버레드를 줄입니다.
오브젝트 풀의 구성 요소:
1. 풀(Pool): 미리 생성된 오브젝트들을 보관하고 있는 컨테이너입니다.
2. 오브젝트 생성 및 초기화: 초기에 풀에 포함될 오브젝트를 생성하고 초기화합니다.
3. 오브젝트 재사용: 오브젝트가 필요한 경우, 풀에서 빼내서 사용하고 필요한 상태로 초기화합니다.
4. 오브젝트 반환: 사용이 끝난 오브젝트를 다시 풀에 반환합니다.
오브젝트 풀 패턴의 예시 코드:
C# 유니티 기준으로 오브젝트 풀.
public class ObjectPool : MonoBehaviour
{
public GameObject prefab;
public int initialPoolSize = 10;
private List<GameObject> objectPool;
private void Start()
{
objectPool = new List<GameObject>();
for (int i = 0; i < initialPoolSize; i++)
{
GameObject obj = Instantiate(prefab);
obj.SetActive(false);
objectPool.Add(obj);
}
}
public GameObject GetObjectFromPool()
{
foreach (GameObject obj in objectPool)
{
if (!obj.activeInHierarchy)
{
obj.SetActive(true);
return obj;
}
}
GameObject newObj = Instantiate(prefab);
objectPool.Add(newObj);
return newObj;
}
public void ReturnObjectToPool(GameObject obj)
{
obj.SetActive(false);
}
}
위의 코드는 오브젝트 풀을 구현한 예시입니다. 주요 요소는 다음과 같습니다:
prefab: 풀에 사용될 오브젝트의 프리팹입니다.
initialPoolSize: 초기에 풀에 생성될 오브젝트의 개수입니다.
objectPool: 실제 오브젝트들을 저장하는 리스트입니다.
Start(): 초기에 풀에 오브젝트들을 생성하고 비활성화합니다.
GetObjectFromPool(): 오브젝트 풀에서 사용 가능한 오브젝트를 가져옵니다. 비활성화된 오브젝트를 찾아 활성화시키고 반환합니다.
ReturnObjectToPool(GameObject obj): 사용이 끝난 오브젝트를 다시 비활성화하여 풀에 반환합니다.
이제 위와 같은 오브젝트 풀을 사용하면 빈번한 오브젝트 생성과 삭제로 인한 성능 저하를 줄일 수 있습니다.
'Unity' 카테고리의 다른 글
유니티 퀘스트2 컨트롤러 셋팅 (0) | 2023.11.24 |
---|---|
유니티 URP(Universal Render Pipeline) 설정방법 (0) | 2023.11.23 |
Unity 디자인패턴 - 스트래티지 패턴(Strategy Pattern) (0) | 2023.08.17 |
Unity 디자인패턴 - 싱글톤(Singleton) (0) | 2023.08.17 |
Unity 성결대 미소과 경진대회 (0) | 2023.06.19 |