Unity

(Unity) 오브젝트 풀링 (효율적인 오브젝트 반복 생성)

Janny_ 2022. 8. 30. 00:12

오브젝트 풀링


무한으로 오브젝트를 반복 생성할 때 가장 간단한 방법은 필요할 때 마다 매번 새로운 오브젝트를 생성하는 것입니다. 하지만 이러한 방식으로 하면 오브젝트 수가 계속 늘어날수록 메모리 사용량이 계속 증가합니다. 또한 새로운 오브젝트를 생성할 때마다 처리량이 늘어나 게임이 끊길 수 있습니다. 이 문제를 해결하기 위한 방식이 오브젝트 풀링 방식입니다.

 

오브젝트 풀링이란 초기에 필요한 만큼 오브젝트를 미리 만들어 '풀', 즉 웅덩이에 쌓아두는 방식입니다.

 

풀에 오브젝트를 생성해둔 이후에는 새로운 오브젝트가 필요할 때 새로운 오브젝트를 생성하지 않고 풀에 있는 오브젝트를 가져다 씁니다. 오브젝트가 필요 없을 때는 오브젝트를 파괴하지 않고 비활성화한 다음, 풀에 반환합니다.

 

Instantiate() 메서드나 Destroy() 메서드와 같이 오브젝트를 실시간으로 생성하거나 파괴하는 처리는 성능을 많이 요구합니다. 또한 메모리를 정리하는 GC(가비지 컬렉션)를 유발하기 쉽습니다. 따라서 게임 도중에 오브젝트를 너무 자주 생성하거나 파괴하면 게임 끊김(프리즈) 현상을 겪게 됩니다.

 

오브젝트 풀링 방식을 사용하면 생성할 오브젝트를 풀에서 가져다 쓰고, 파괴할 오브젝트를 풀에 반납합니다. 그리고 풀에 반납한 오브젝트는 나중에 다시 꺼내 재사용할 수 있습니다.

 

이 방식은 게임 초반에 필요한 오브젝트를 미리 생성하기 때문에 로딩 시간이 길어질 수 있습니다. 하지만 로딩시간이 긴 게임이 대체로 게임 도중에 끊김이 없는 이유가 이렇게 게임 초반에 필요한 오브젝트를 미리 생성하기 때문입니다. 

 

따라서 오브젝트의 반복 생성을 요하는 게임을 개발할 때, 오브젝트 풀링 방식을 사용하면 게임 끊김 현상을 줄이는 것이 가능합니다.

 

오브젝트 풀링의 사용 예시

ex) 횡스크롤 러닝 게임의 발판 반복 생성 시, 게임이 시작되면 필요한 만큼 발판 오브젝트를 생성하여 게임 화면에 보이지 않는 구석진 장소(풀)에 배치합니다. 그 다음 일정 시간이 지나면 풀에서 발판을 가져와 순서대로 발판 배치를 시작합니다. 배치 후 화면에서 벗어난 발판은 reset하고 다시 풀에 반납합니다.

 

 

 

 

 

 

<참고>

레트로의 유니티 게임 프로그래밍 에센스