본문 바로가기

이전 게시물들/유니티

오브젝트 풀링

개요

유니티 오브젝트 생성(Instantiate)과 삭제(Destroy)시 가비지 콜렉터를 호출합니다. 오브젝트 풀링은 오브젝트를 미리 만들어 놓고 활성/비활성 으로 재상용하여 최적화하는 방법입니다.

 

아래 코드에서는 풀 사이즈를 정해놓고 배열로 구현했습니다.

 

리스트를 통해 구현하고 풀사이즈를 조금씩 늘려서 사용하기도 합니다.

(풀 사이즈보다 더 많은 수의 객체를 필요로하면 조금씩 풀 사이즈를 늘린다)

 

객체를 다 사용하면 파괴하는 대신 비활성화 해주면 됩니다.

 

코드

    public GameObject objPrefab;
    public int poolSize;
    private int poolIndex;
    private GameObject[] pool;
    
    void InitPool()
    {
    	pool = new GameObject[poolSize];
        poolIndex = 0;
        for (int i = 0; i < poolSize; i++)
        {
            GameObject obj = Instantiate(objPrefab);
            obj.SetActive(false);
            pool.Add(obj);
        }
    }

    
    void MakeObj()
    {
        pool[poolIndex].SetActive(true);
        
        if (++poolIndex >= sonCubePoolSize)
        {
            poolIndex = 0;
        }

    }