有希
Object Pooling 본문
성능최적화 관련 기법.
Pooling: 어딘가에 저장되어 있는 리소스를 메모리에 올려놓고, 이것을 인스턴스화 하는 것이 어마어마하게 느리다. 필요할 때 마다 하나씩 긁어와서 배치하는 것은 너무 느려서 이것을 개선해야 한다. 당장 필요없어도 곧 필요할 것이니 계속 어딘가에 상주시켰다가 필요할 때 쓰는 것. 재사용의 개념 정도? 커피 일회용컵 재사용 하는 느낌…
코드 상에서 Load를 해서 GameObject로 저장한 상태에서는 ssd에서 긁어와 메모리에 적재한 상태이고, Object.Instanciate하면 인스턴스화 한 것이다.
풀매니저를 만들고, 모든 풀들의 부모인 _root를 생성한다(게임오브젝트나 트랜스폼으로)
이 녀석은 Dontdetroyonload로. 풀 매니저는 dic으로 여러 개의 풀들을 갖고 있는데, 이 풀들은 string을 키로 저장한다. 풀에는 Load로 불러온 오리지널들을 저장하고 있는다.
이제 푸시 팝을 구현한다.
푸시: parent는 root로, gameObject의 setactive는 false로 두어 수면상태?로 둔다. 풀매니저에서는 그냥 이 푸시를 호출하면 된다.
팝: parent를 인자로 받는다. 풀스택에 개수가 0 이상이라면 그 녀석을 꺼내온다. 아니라면 create (getoraddcomponent로생성)하여 반환해준다. 다만, 리턴 전에 setactive를 true로 해준다. 부모도 설정해주고.
클리어: foreach로 root의 차일드들에 대해서 모두 destroy 하고, pool stack도 클리어해준다.
'프로그래밍 > UnityEngine기초' 카테고리의 다른 글
Data Manager (0) | 2021.09.05 |
---|---|
Coroutine (0) | 2021.09.04 |
Sound Manager (0) | 2021.09.04 |
Scene Manager (0) | 2021.09.04 |
UI_Manager (0) | 2021.09.04 |