알아보자 시리즈

유니티 : 오브젝트 풀링(Object Pooling)에 대해 알아보자

근본넘치는개발자 2024. 8. 27. 17:30

 

오늘은 최적화 기법 중 하나인 오브젝트 풀링에 대해 알아보고자 합니다. 

 

왜 사용하는가? 

게임을 하다보면 오브젝트를 생성하거나

파괴하는 작업을 반복해야하는 경우가 많습니다. 

 

생성과 파괴를 하는 과정에서 메모리는

이에 대해 새롭게 할당 및 해제하는 작업을 하게 됩니다.

 

오브젝트가 적을때는 상관 없지만 많아질 경우

CPU에 부담이 갈 수 있을 뿐 아니라, 

메모리를 해제하는 작업에서 가비지 컬렉터가 발생하게 됩니다.

이 또한 CPU에 부담을 가중 시킬 수 있습니다.

 

 

https://docs.unity3d.com/kr/2021.3/Manual/performance-garbage-collector.html

 

가비지 컬렉터 개요 - Unity 매뉴얼

Unity에서는 가비지 컬렉터를 사용하여 애플리케이션과 Unity에서 더 이상 사용하지 않는 오브젝트로부터 메모리를 회수합니다. 스크립트가 관리되는 힙에 할당하려고 하지만 할당을 수용할 수

docs.unity3d.com

 

 

오브젝트 풀링(Object Pooling) 어떻게 사용하나? - 원리

 

자주 사용하는 오브젝트들을 미리  Pool에 담아놓고

Object를 생성해야 할때마다 활성화 시켜서

Pool에 있는 오브젝트들을 불러와 사용하는 방식입니다.

 

삭제를 해야 할 경우 Object를 파괴하는게 아닌

비활성화 해줌으로서 화면상에는 사라지지만,

 

Pool안에 남아 있으므로 필요할 때마다 다시 활성화 시켜

재사용 함으로서 CPU의 부담을 줄일 수 있습니다. 

 

때때로 Pool안에 있는 오브젝트보다 더 많은 오브젝트가 필요하다면

추가로 생성, 후에 파괴하기도 하지만 기존 방식에 비해 횟수를 줄일 수 있습니다.

 

 

오브젝트 풀링의 문제점은 없을까?

 

필요한 것 보다 더 많은 오브젝트를 초기에 Pool에 설정할 경우

메모리 낭비가 이어질 수 있습니다.

 

 

이전에 배울때는 없었는데 찾다보니

유니티 내 클래스로 오브젝트 풀링을 구현하기 쉽도록 공식적으로  추가가 되었더군요. 

이를 활용하면 보다 쉽게 최적화를 진행할 수 있을거 같습니다. 

 

https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Pool.ObjectPool_1.html

 

Unity - Scripting API: ObjectPool<T0>

Object Pooling is a way to optimize your projects and lower the burden that is placed on the CPU when having to rapidly create and destroy new objects. It is a good practice and design pattern to keep in mind to help relieve the processing power of the CPU

docs.unity3d.com

 

참고했던 블로그 입니다. 

https://starlightbox.tistory.com/84

 

[Unity] 오브젝트 풀링 (Object pooling)

안녕하세요. 오늘은 오브젝트 풀링에 대해서 알아볼게요. 1. 왜 오브젝트 풀링을 써야 할까요? 유니티에서 오브젝트를 생성하기 위해서는 Instantiate를 사용하고 삭제할 때는 Destroy를 사용해요. 하

starlightbox.tistory.com

 

https://youtu.be/jvJ1Vd7PGwk?si=BYktiLrG01pY97ss

 

 

 

 

오늘은 최적화 기법 중 하나인 오브젝트 풀링(Object Pooling)에 대해 알아보았습니다.