Unity

Unity 디자인패턴 - 오브젝트 풀(Object Pool)

Dev_Jen 2023. 8. 17. 14:33
반응형

오브젝트 풀

오브젝트 풀(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): 사용이 끝난 오브젝트를 다시 비활성화하여 풀에 반환합니다.
이제 위와 같은 오브젝트 풀을 사용하면 빈번한 오브젝트 생성과 삭제로 인한 성능 저하를 줄일 수 있습니다.

 

 

 

반응형