관리 메뉴

有希

Object Pooling 본문

프로그래밍/UnityEngine기초

Object Pooling

有希. 2021. 9. 4. 23:20

성능최적화 관련 기법.

Pooling: 어딘가에 저장되어 있는 리소스를 메모리에 올려놓고, 이것을 인스턴스화 하는 것이 어마어마하게 느리다. 필요할 때 마다 하나씩 긁어와서 배치하는 것은 너무 느려서 이것을 개선해야 한다. 당장 필요없어도 곧 필요할 것이니 계속 어딘가에 상주시켰다가 필요할 때 쓰는 것. 재사용의 개념 정도? 커피 일회용컵 재사용 하는 느낌

코드 상에서 Load를 해서 GameObject로 저장한 상태에서는 ssd에서 긁어와 메모리에 적재한 상태이고, Object.Instanciate하면 인스턴스화 한 것이다.

풀매니저를 만들고, 모든 풀들의 부모인 _root를 생성한다(게임오브젝트나 트랜스폼으로)

이 녀석은 Dontdetroyonload. 풀 매니저는 dic으로 여러 개의 풀들을 갖고 있는데, 이 풀들은 string을 키로 저장한다. 풀에는 Load로 불러온 오리지널들을 저장하고 있는다.

이제 푸시 팝을 구현한다.

푸시: parentroot, gameObjectsetactivefalse로 두어 수면상태?로 둔다. 풀매니저에서는 그냥 이 푸시를 호출하면 된다.

: parent를 인자로 받는다. 풀스택에 개수가 0 이상이라면 그 녀석을 꺼내온다. 아니라면 create (getoraddcomponent로생성)하여 반환해준다. 다만, 리턴 전에 setactivetrue로 해준다. 부모도 설정해주고.

클리어: foreachroot의 차일드들에 대해서 모두 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