2025. 11. 28. 23:37ㆍ본 캠프
실전 프로젝트을 앞두고 마지막 소규모 팀 프로젝트가 결정됐다.
이번 팀프로젝트에서 한 걸 가지고 실전 프로젝트까지 가져갈 수 도 있고 팀 협업을 통해 아쉬웠던 부분을 보강할 수 있게 됐다.
이번 팀 과제는 기획 쪽 팀원과 함께하는 기획/개발 협동 프로젝트로 진행되서
여러 기획서를 보고 지원을 하게 되었고 그 중에 '3D 쿼터뷰/탑뷰 슈팅 로그라이크 액션' 을 하게 됐다.
내가 맡은 파트는 무기 구현으로 플레이어 캐릭터가 모듈로 장착하는 다양하는 무기들의 원거리 공격을 구현해야 한다.
그동안 강의를 통해 접해왔던 오브젝트 풀링을 실전에서 써볼 수 있는 좋은 기회라고 생각 해 무기 파트를 하고 싶었다.
오브젝트 풀링이란?
오브젝트를 계속 생성(new)하고 없애는(destroy) 작업은
CPU 비용이 크고, 메모리 단편화나 GC(Garbage Collection) 부담을 증가시킨다
그래서 미리 여러 개의 객체를 생성 → 필요할 때 하나 꺼내서 사용 → 다 쓰면 다시 반환하여 재사용하는 방식을
오브젝트 풀링이라고 한다.
아마 이번 프로젝트에서는 발사되는 '총알'을 구현하는데 주로 쓸 거 같다.
오브젝트 풀링을 왜 써야할까?
생성/파괴 비용 절감
게임에서 총알, 파편, 이펙트처럼 짧은 시간에 여러 번 생성되는 객체가 있을 때, 매번 new/destroy를 하면 성능 저하가 발생.
GC 부하 감소
C#, Unity 같은 환경에서는 객체를 많이 만들고 버리면 GC가 자주 발생해서 프레임 드랍이 생김.
안정적인 성능
미리 준비된 객체만 사용하므로 특정 순간에 갑자기 성능이 떨어지는 일을 방지함.
동작 방식은 아래와 같다.
- 초기화 단계: 일정 개수의 객체를 미리 생성하고 풀에 저장
- 할당(Get): 객체가 필요하면 풀에서 “사용 가능 객체”를 꺼냄
- 반환(Release): 사용을 마친 객체를 초기 상태로 되돌린 뒤 다시 풀에 넣음
- 확장(Optional): 필요량이 많으면 풀의 크기를 늘릴 수도 있음
한번에 탄환을 10개 발사한다면 10개의 탄환 프리펩을 미리 활성화시켜두고 사용하고 다시 반환하고 다시 활용하는
방식으로 효과적으로 메모리를 관리할 수 있게 된다.
총알이 발사되거나 부딪힐 때의 이펙트처리도 같이 처리한다면 더욱 좋은 효과를 볼 수 있을 것으로 기대된다.
총알 프리펩 및 사운드, 효과 등 을 어드레서블로 등록시켜서 사용한다면
로딩이나 데이터관리 측면에서도 같이 시너지를 낼 거 같다.
무기와 장착 시스템/ 아이템 드롭을 바로 주웠을 때 빈 슬롯에 자동 장착하는 기능 등 다양하게 활용해보고
이벤트버스나 Queue 활용 등 다양한 패턴들을 활용해서 잘 만들어보고자 한다.
'본 캠프' 카테고리의 다른 글
| [내일배움캠프 본 캠프 46일차] 팀프로젝트 2일차 (0) | 2025.12.02 |
|---|---|
| [내일배움캠프 본 캠프 45일차] 팀프로젝트 1일차 (0) | 2025.12.01 |
| [내일배움캠프 본 캠프 43일차] 심화프로젝트 개인 4일차 (0) | 2025.11.27 |
| [내일배움캠프 본 캠프 42일차] 심화프로젝트 개인 3일차 (0) | 2025.11.26 |
| [내일배움캠프 본 캠프 41일차] 심화프로젝트 개인 2일차 (0) | 2025.11.25 |