Ruya Games

유니티 공식 오브젝트 풀링 API 사용법 - 1 본문

Unity

유니티 공식 오브젝트 풀링 API 사용법 - 1

SadEvil 2024. 1. 1. 16:54

오브젝트 풀(또는 오브젝트 풀링) 패턴이란게 있습니다.

1)사용할 오브젝트 목록을 미리 생성해서 메모리에 올려놓고,

2)사용자 오브젝트의 요구가 발생하면

3)풀에 있는 오브젝트들을 풀에서 꺼낸뒤,

4)사용자 오브젝트에게 제공하는 방식으로 동작합니다.

 

풀에서 꺼내진 오브젝트는 사용이 종료되면 다시 풀로 돌아가게 되고, 이렇게 오브젝트를 재사용하는 원리입니다.

 

주로 총알같은 동일한 발사체들을 여러개 생성해야 할때 유용합니다.

 

오브젝트 풀은 들어가는 오브젝트의 개수를 조정함으로써 사용하는 메모리의 양을 일관적이도록 조정할 수 있습니다.

구체적으로는, 만약 설정한 양보다 오브젝트의 개수가 적다면 런타임 안에서 동적으로 생성하도록 할 수 있고, 사용이 종료된 오브젝트가 다시 풀로 돌아가려고 할때 풀이 지정한 크기만큼 다 차있다면, 해당 오브젝트를 제거하는 방식으로 조정 가능합니다.

 

오브젝트 풀 패턴의 장단점은 다음과 같습니다.

장점 단점
메모리 사용량 예측 가능 객체 상태 관리 필요
성능 향상  

 

장점중 성능 향상은 게임이 실행중일때의 성능 향상으로, 이미 초기화해둔 메모리의 오브젝트 객체들을 사용한다면 새로운 객체의 초기화에 드는 로딩 비용이 필요 없게 됩니다. 한번에 많은 양의 오브젝트를 생성하거나 삭제한다면 로딩 비용의 발생과 GC의 실행으로 인해 프레임 저하가 발생할 수 있는데, 이러한 현상을 발생하지 않도록 해줍니다.

 

단점으로는 객체의 상태 관리가 필요하다는 점인데요. 단순히 생성(Instantiate), 삭제(Destroy)로 사용한다면 이미 기획한대로의 생명주기가 끝난 오브젝트를 굳이 다시 초기상태로 되돌릴 필요가 없습니다. 삭제 후 다른 오브젝트를 생성하면 되니까요. 하지만 오브젝트 풀 패턴은 역할을 다한 오브젝트를 다시 초기상태로 돌린 후에 다시 사용하기 때문에, 오브젝트를 초기상태로 돌리도록 하는 별도의 작업이 필요합니다. 이 작업은 오브젝트의 변수 상태, 애니메이션 등을 모두 포함하기 때문에, 미리 생각해두지 않고 개발한다면 귀찮아질 수 있습니다.

 

다음 글에서는 스크립트를 통한 구체적인 구현 방법을 포스팅하겠습니다.