• Home
  • About
    • KKsDev photo

      KKsDev

      게임 프로그래머를 목표로 Unity, C#을 공부하고 있습니다.

    • Learn More
    • Email
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects

내일배움캠프 45일차 TIL 오브젝트 풀 분석

18 Sep 2023

Reading time ~1 minute

오늘 배운 내용

  1. 오브젝트 풀 코드 분석

nbcbanner



오브젝트 풀 사용하기

오브젝트 풀 이란? 유니티에서 자주 나타나고 사라지는 오브젝트를

계속해서 생성하고 파괴한다면 자원의 소모가 크다? 그래서 오브젝트 풀로 이런 오브젝트들을 관리하며

일정량 만들어둔 오브젝트를 계속해서 재활용하는 방법이다.

public class ObjectPool : MonoBehaviour
{
    [Serializable]
    public struct Pool
    {
        public string tag;
        public GameObject prefab;
        public int size;
    }

    public List<Pool> pools;
    public Dictionary<string, Queue<GameObject>> poolDictionary;

    private void Awake()
    {
        poolDictionary = new Dictionary<string, Queue<GameObject>>();

        foreach(var pool in pools)
        {
            Queue<GameObject> objectPool = new Queue<GameObject>();
            for(int i = 0; i < pool.size; i++) 
            {
                GameObject go = Instantiate(pool.prefab);
                go.SetActive(false);
                objectPool.Enqueue(go);
            }

            poolDictionary.Add(pool.tag, objectPool);
        }
    }

    public GameObject SpawnFromPool(string tag)
    {
        if (!poolDictionary.ContainsKey(tag)) return null;

        GameObject obj = poolDictionary[tag].Dequeue();
        poolDictionary[tag].Enqueue(obj);

        return obj;
    }

}
  1. 오브젝트 풀은 List과 Dictionary<stirng, Queue>를 가진다.

  2. List에는 풀로 관리할 오브젝트들이 들어가 있다.

  3. struct Pool은 tag 이름, GameObject 프리펩과, size 갯수를 가진다.

  4. 오브젝트 풀이 Awake()될때 List에 있는 Object들의 오브젝트 풀을 각각 Queue로 생성한다.

  5. 오브젝트 풀이 있는 오브젝트를 사용할때는 SpawnFromPool()을 이용해서 Queue의 가장 앞의 객체부터 불러온다.

  6. 풀로 생성한 오브젝트는 파괴 시키지 않고 SetActive(false)로 만들어준다.



nbcthumbnail



TIL내일배움캠프스파르타 Share Tweet +1