오늘은 최적화 기법 중 하나인 오브젝트 풀링에 대해 알아보고자 합니다.
왜 사용하는가?
게임을 하다보면 오브젝트를 생성하거나
파괴하는 작업을 반복해야하는 경우가 많습니다.
생성과 파괴를 하는 과정에서 메모리는
이에 대해 새롭게 할당 및 해제하는 작업을 하게 됩니다.
오브젝트가 적을때는 상관 없지만 많아질 경우
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)에 대해 알아보았습니다.
'알아보자 시리즈' 카테고리의 다른 글
유니티 - Burst 컴파일러에 대해 알아보자 (2) | 2024.10.16 |
---|---|
직렬화(Serialization)/ 역직렬화(Deserialization) (feat. JSON, CSV, XML, YAML) 에 대해 알아보자 (0) | 2024.09.30 |
'깃/커밋 컨벤션' 에 대해 알아보자 (0) | 2024.09.10 |
'깃허브'에 대해 알아보자 (0) | 2024.09.09 |
유니티 - Unity Visual Scripting에 대해 알아보자 (0) | 2024.09.04 |