개요
Unity에서 Instantiate나 Destroy를 사용할 때마다 메모리 파편화가 발생한다.
파편화된 메모리를 정리하는데에는 GC(Garbage Collector)가 사용되는데, 프레임 드롭을 유발한다고 한다.
따라서 오브젝트를 생성할 때 메모리 파편화를 최대한 적게 일으키기 위해 오브젝트 재활용이 필요하다.
방법
방법은 간단하다.
1. 오브젝트 풀을 미리 선언한다.
2. 오브젝트 풀에서 관리할 오브젝트를 생성한다.
3. 오브젝트를 사용할 때, 새로 만들지 않고 오브젝트 풀에서 꺼내온다.
3-1. 이미 오브젝트 풀의 모든 오브젝트를 사용중이여서 꺼내올 오브젝트 없다면, 새로 만들어준다. (선택사항)
4. 오브젝트를 지우거나 비활성화 할 때, 오브젝트 풀에 다시 넣어준다.
예시
https://www.youtube.com/watch?v=uFAYFoaEwhk&list=PLO-mt5Iu5TeajtA5UQT7_2UjB7_dkGagU&index=7
골드메탈님의 Dongle 게임에서 오브젝트 풀링 예시이다.
예전에 유행했던 수박게임의 일종으로, 게임을 진행하면 Dongle들과 effect가 계속 생성되고 삭제된다.
이러한 Dongle과 effect를 관리하는 donglePool, effectPool을 선언해주고, 여기서 오브젝트들을 관리한다.
Dongle을 가져올 때, donglePool에서 활성화 중이 아닌 Dongle을 가져온다.
Dongle이 모두 활성화 중이라 가져올 수 없을 때는, 새로 Dongle을 만든다.
Dongle을 만들 때 effect, dongle을 instantiate 해준 뒤 effectPool, donglePool 배열에 각각 추가해준다.
Dongle Group, Effect Group 아래에서 dongle과 effect를 추가해주고 비활성화 하면서 오브젝트 풀링이 이뤄지고 있다.
참조
https://wergia.tistory.com/203
'게임 엔진 > Unity' 카테고리의 다른 글
[Unity] 2D Tilemap Extras 설치하기 (2D 타일맵 엑스트라) (0) | 2021.11.08 |
---|---|
[Unity] Rule Tile (0) | 2021.11.07 |
[Unity] Physics.Raycast (0) | 2021.10.28 |
[Unity] Debug.DrawRay (0) | 2021.10.27 |
Unity(유니티)와 Sourcetree(소스트리) 연동하기 (0) | 2021.09.30 |