본문 바로가기
Unity 게임 개발

Unity Object Pooling

by daisy0461 2021. 6. 17.

서론: 공부의 의유

이번에는 Object Pooling에 대해서 공부를 해보았습니다.
이것은 아예 존재 자체도 모르고 있었습니다.
그렇게 다양하게 프로젝트를 해볼때도 생각도 못하고 있었습니다.

이것의 중요성을 알게된 계기는 오픈카톡방에서 누군가가 최적화와 관련된 질문을 하셨고
파괴, 생성을 지양하고 풀링기법을 이용하라고 말씀해주셨습니다.
지금까지 파괴 생성을 했던 저로써는 쇼킹했고 공부의 필요성을 느꼈습니다.

많은 부분에서 도움을 받은 영상입니다.
https://www.youtube.com/watch?v=xiojw0lHzro&t=2s

Object Pooling의 존재 이유

프로그래밍에서 Object를 생성 or 파괴는 꽤나 무거운 작업입니다.
생성은 메모리를 새로 할당하고 리소스를 로드하는 등의 초기화 과정이 필요합니다.
파괴는 파괴 이후에 발생하는 Garbage Collecting으로 인한 프레임 드랍이 발생할 수 있다.

Object Pooling의 개념

위 사진처럼 Object를 담아두는 Object Pool을 생성합니다.
그리고 그 안에 빌려줄 Object를 생성합니다. 이때 Object Pool안에 있는 Object는 Object Pool이 관리합니다.
위 Object Pool안에 존재하는 Object를 외부에서 필요하면
새로 Object를 생성하는 것이 아니라 Object Pool;에서 빌려서 쓰고 다 쓰면 다시 돌려 놓습니다.

그렇다면 Object Pool에 더 이상 빌려줄 Object가 없다면 어떻게 될까요?
간단합니다. 그때 새로운 Object를 Object Pool안에 생성을 하고 빌려줍니다.
위에서 새로 생성한 Object도 동일하게 Object Pool이 관리를 합니다.
이 Object Pool에 존재하는 Object들이 완전히 필요가 없어지면 전부 파괴한다.

보통 이 기법은 총알, 화살에 사용이 되거나
캐릭터가 뛸때 생성되는 먼지 이펙트 부분에 사용이 된다.

Object Pool 정리

간단하게 Object Pool을 정리해보자면
Object의 생성과 파괴는 꽤 무거운 작업이다.
그렇기에 대체할 작업이 필요하다.
-> Object Pooling 작업
이 Object Pooling은 Object Pool에서 미리 Object를 만들어서
외부에서 필요하면 빌려주고 다 쓰고 나면 다시 돌려 받는다.