게임에는 컴퓨터의 리소스와 직접적인 연관이 있는 요소가 있습니다.
눈을 사로잡는 화려한 이펙트나 디테일하게 다뤄지는 물리 효과, 정교하게 다듬어진 모델링이 그러합니다.
그러나 컴포터의 리소스를 직접적으로 조절하는 것은 결국 게임의 역할입니다.
최적화를 얼마나 잘 수행했느냐가 바로 리소스를 조정하고 게임을 더 재미있고 역동적으로 만들기 때문입니다.
이번 포스트에서 소개해드릴 오브젝트 풀은 바로 이 최적화와 관련이 있습니다.
먼저 유니티 코리아에서 제공하는 오브젝트 풀과 관련되 동영상을 링크로 올려드리겠습니다.
https://www.youtube.com/watch?v=jvJ1Vd7PGwk
오브젝트 풀은 총알이나 화살처럼 단순하지만 무수히 많이 생성되는 오브젝트를 다루는데 효과적입니다.
떨어지는 물이 바위에 구멍을 뚫듯 단순한 오브젝트가 셀 수 없이 많이 생성되면
결국 컴퓨터의 리소스를 잡아먹게 되어 게임의 재미를 반감시키게 됩니다.
오브젝트 풀은 그러한 문제를 해결하고자 등장한 개념입니다.
더 자세한 설명은 위의 링크에서 대체하고 바로 예제를 보겠습니다.
1) 참고
참고한 영상은 AlexDev님의 동영상입니다.
https://www.youtube.com/watch?v=B86sH_II3MY
AlexDev님은 위와 같은 유용한 유투브 동영상을 제공하실 뿐만 아니라 Udemy에서도 양질의 강의를 만드십니다.
유니티에서 구현가능한 여러가지 기법들을 배워볼 수 있으므로 구매하여 수강해보는 것도 매우 추천드립니다.
2) Object Pool의 구현
사용할 스크립트는
ObjectCreator와 ObjectPool의 두 가지입니다.
전자는 오브젝트 풀에서 생성된 오브젝트를 실질적으로 사용하는 역할을 수행합니다.
후자는 오브젝트 풀의 역할을 수행하여 오브젝트를 생성하되 사용하지는 않습니다.
코드를 보겠습니다.
ObjectCreator는 생성된 오브젝트를 활용하는 요소이므로 코드가 매우 단순합니다.
생성주기인 cooldown을 낮게 조정할수록 더 자주 오브젝트를 활용합니다.
다음으로 중심주제인 ObjectPool을 보겠습니다.
코드는 위와 같이 구성됩니다.
이제 사용예시를 보겠습니다.
3) 실행결과
위와 같이 월드에 배치하였습니다.
의도하는 대로라면 오브젝트 풀에는 10개의 비활성화된 오브젝트가 생성되고
오브젝트는 1초마다 하나씩 활용될 것입니다.
실제 결과를 확인해보겠습니다.
예상했던 대로 1초마다 오브젝트가 활용되고, 2초로 설정하는 경우 더 늦게 오브젝트가 활용되는 것을 확인하였습니다.
오브젝트 풀의 작성 방법은 여러가지가 존재합니다.
오브젝트 풀은 어느 정도 규모가 있는 게임에서는 리소스의 조정을 위해 반드시 필요한 기능입니다.
이 포스트가 어느 정도 도움이 되었다면 좋겠습니다.
'유니티 > 유니티 C#' 카테고리의 다른 글
유니티 입력 처리 심화 - (2) 임베디드 방식 (0) | 2024.12.10 |
---|---|
유니티 입력 처리 심화 - (1) Direct 방식 (1) | 2024.12.09 |
Collision과 Trigger (0) | 2024.11.11 |
마우스 입력을 통한 캐릭터 이동 (0) | 2024.11.10 |
Input Manager와 Input System (0) | 2024.07.13 |