주녘공부일지

[더 챌린저스] 오브젝트 풀링 본문

GameEngine/Unity - Project

[더 챌린저스] 오브젝트 풀링

주녘 2023. 8. 23. 18:55
728x90

오브젝트 풀링

public class ObjectPoolMgr
{
    class Pool { ... }

    Dictionary<string, Pool> pools = new Dictionary<string, Pool>();
   
    Transform root;

    int poolCount = 5;

    public void Init()
    {
        if (root == null)
        {
            root = new GameObject { name = "@Pool_Root" }.transform;
        }

        PhotonPrefabPool.Init();
    }

    public void CreatePool(GameObject original, int count)
    {
        Pool pool = new Pool();
        pool.Init(original, count);
        pool.Root.parent = root;

        pools.Add(original.name, pool);
    }

    public void Push(Poolable poolable)
    {
        string name = poolable.gameObject.name;

        if(pools.ContainsKey(name) == false) // 이 경우엔 파괴
        {
            GameObject.Destroy(poolable.gameObject);
            return;
        }

        pools[name].Push(poolable);
    }

    public Poolable Pop(GameObject original, Transform parent = null)
    {
        if (pools.ContainsKey(original.name) == false)
            CreatePool(original, poolCount); // poolCount만큼 생성

        return pools[original.name].Pop(parent);
    }

    public void GeneratePool(GameObject original, int count, Transform parent = null)
    {
        if (pools.ContainsKey(original.name) == true)
        {
            pools.TryGetValue(original.name, out var _pool);
            _pool.Add(original, count);
            return;        
        }

        CreatePool(original, count);
    }
}

 

 

+ 사운드오브젝트들은 사운드매니저에서 게임이 시작될 때 따로 풀링하고 관리함

 -> 한번 생성되면 게임을 종료할 때까지 사용하므로 DontDestroyOnLoad로 생성

728x90