2024. 2. 14. 22:35ㆍIT/TIL
오늘의 TIL은 유니티에서 게임을 만들면서 사용되는 기술 중 하나인 오브젝트 풀링에 관한 내용이다.
오브젝트 풀링이란 오브젝트가 담겨있는 풀(인재 풀)을 사용하여 그곳에서 필요한 경우에 오브젝트를 가져오는 방법이다.
다시 말해서 현재 사용하지 않지만, 처음에 미리 오브젝트들을 생성한 뒤에 비활성화 시켜놓은 뒤에
필요한 경우에 활성화 시켜서 실제로 사용하는 오브젝트로 만드는 방법이다.
오브젝트 풀링을 사용하는 이유
1. 성능 향상
오브젝트의 생성 및 파괴는 비용(메모리 할당/해제 및 이로 인한 GC)이 많이 들기 때문에,
미리 생성된 오브젝트를 재활용하여 성능을 향상시키는 역할을 한다.
2. 메모리 관리
오브젝트 풀을 사용하면 게임 실행 중에 오브젝트를 반복적으로 생성하고 삭제하는 것보다
메모리를 효율적으로 관리할 수 있다.
(위의 메모리 할당/해제, GC가 줄어들기 때문)
의 두 가지로 최적화를 고려할 때 사용할 수 있는 방법이다.
오브젝트 풀의 활용 사례
1. 총알
게임에서 총알은 자주 생성되고 삭제되는 게임 오브젝트 중 하나로
총알을 매번 생성하고 삭제하는 대신,
총알 오브젝트 풀을 사용하여 재활용한다면 최적화적인 부분에서 많은 이점을 볼 수 있다.
2. 적 캐릭터(몬스터)
몬스터는 게임에서 자주 등장하는 오브젝트로 많은 수의 몬스터를 생성하고 제거하는 대신,
몬스터를 오브젝트 풀을 사용하면 효율적으로 관리할 수 있다.
오브젝트 풀의 종류
1. 미리 생성해두는 오브젝트 풀
게임이 시작되는 상황(Start나 Awake 등)에서 사전이 지정한 poolsize 만큼 해당 오브젝트를 생성한 뒤에
이 오브젝트들을 비활성화 상태로 설정한 뒤에 필요한 경우에 활성화하는 방식으로 사용한다.
만약 오브젝트를 전부 사용했다면 null을 반환하는 방식이다.
이 방식은 오브젝트의 수가 한정되어있고, 이를 다 사용하면 더는 추가하지 않는 방식이다.
2. 제한이 있는 오브젝트 풀
사용이 끝난 오브젝트를 재사용할 수 있게 만든 오브젝트 풀이다.
탄막 슈팅 게임의 탄환이나 이펙트 같은 오브젝트를 관리하는데 사용할 수 있다.
3. 동적 오브젝트 풀
미리 생성해두는 오브젝트 풀을 따라서
어느 정도의 수의 오브젝트를 생성한 뒤에 비활성화 상태로 만들고 사용한 뒤에
오브젝트가 부족한 경우에 추가로 오브젝트를 생성하는 방식이다.
1번의 방식의 발전형으로 보다 규모가 큰 게임에서 사용하는 방식이다.
만약 오브젝트가 너무 많아 문제가 생길 것으로 예상되면,
생성되는 오브젝트의 한계 수를 지정하여 최적화적인 부분을 관리할 수 있다.
오브젝트 풀을 사용해야되는 경우
- 오브젝트의 생성과 파괴가 잦다.
- 오브젝트를 많이 생성해야된다. (적어도 30개 이상)
- 오브젝트의 생성 관리를 체계적으로 하고 싶다.
- 전부 같은 오브젝트인 경우에 사용할 수도 있지만, 같지 않은 오브젝트를 만들 수도 있다.
오늘은 작업을 하면서 오브젝트 풀링의 필요성을 느끼게 되어서 해당 개념을 다시 정리하는 시간을 가졌다.
내일은 실제로 오브젝트 풀링을 이용하여 관리하는 방법을 확인하고 정리하고자 한다.
'IT > TIL' 카테고리의 다른 글
20240216_MVC 패턴 (0) | 2024.02.19 |
---|---|
20240215_디자인 패턴 (0) | 2024.02.15 |
20240213_오버로딩, 오버라이딩 (0) | 2024.02.14 |
20240210_2개 이하로 다른 비트(프로그래머스) (2) | 2024.02.10 |
20240209_유니티 초기화 순서 관련 (0) | 2024.02.10 |