오늘 배운 내용
- 오브젝트 풀 코드 분석
오브젝트 풀 사용하기
오브젝트 풀 이란? 유니티에서 자주 나타나고 사라지는 오브젝트를
계속해서 생성하고 파괴한다면 자원의 소모가 크다? 그래서 오브젝트 풀로 이런 오브젝트들을 관리하며
일정량 만들어둔 오브젝트를 계속해서 재활용하는 방법이다.
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;
}
}
-
오브젝트 풀은 List
과 Dictionary<stirng, Queue >를 가진다. -
List
에는 풀로 관리할 오브젝트들이 들어가 있다. -
struct Pool은 tag 이름, GameObject 프리펩과, size 갯수를 가진다.
-
오브젝트 풀이 Awake()될때 List에 있는 Object들의 오브젝트 풀을 각각 Queue로 생성한다.
-
오브젝트 풀이 있는 오브젝트를 사용할때는 SpawnFromPool()을 이용해서 Queue의 가장 앞의 객체부터 불러온다.
-
풀로 생성한 오브젝트는 파괴 시키지 않고 SetActive(false)로 만들어준다.