[내일배움캠프 본 캠프 44일차] 심화 팀프로젝트 결성

2025. 11. 28. 23:37본 캠프

실전 프로젝트을 앞두고 마지막 소규모 팀 프로젝트가 결정됐다.

 

이번 팀프로젝트에서 한 걸 가지고 실전 프로젝트까지 가져갈 수 도 있고 팀 협업을 통해 아쉬웠던 부분을 보강할 수 있게 됐다.

 

이번 팀 과제는 기획 쪽 팀원과 함께하는 기획/개발 협동 프로젝트로 진행되서

여러 기획서를 보고 지원을 하게 되었고 그 중에 '3D 쿼터뷰/탑뷰 슈팅 로그라이크 액션' 을 하게 됐다.

 

내가 맡은 파트는 무기 구현으로 플레이어 캐릭터가 모듈로 장착하는 다양하는 무기들의 원거리 공격을 구현해야 한다.

 

그동안 강의를 통해 접해왔던 오브젝트 풀링을 실전에서 써볼 수 있는 좋은 기회라고 생각 해 무기 파트를 하고 싶었다.

 


오브젝트 풀링이란?

 

오브젝트를 계속 생성(new)하고 없애는(destroy) 작업은

CPU 비용이 크고, 메모리 단편화나 GC(Garbage Collection) 부담을 증가시킨다

그래서 미리 여러 개의 객체를 생성 → 필요할 때 하나 꺼내서 사용 → 다 쓰면 다시 반환하여 재사용하는 방식을

오브젝트 풀링이라고 한다.

 

아마 이번 프로젝트에서는 발사되는 '총알'을 구현하는데 주로 쓸 거 같다.


오브젝트 풀링을 왜 써야할까?

 

생성/파괴 비용 절감

게임에서 총알, 파편, 이펙트처럼 짧은 시간에 여러 번 생성되는 객체가 있을 때, 매번 new/destroy를 하면 성능 저하가 발생.

 

GC 부하 감소

C#, Unity 같은 환경에서는 객체를 많이 만들고 버리면 GC가 자주 발생해서 프레임 드랍이 생김.

 

안정적인 성능

미리 준비된 객체만 사용하므로 특정 순간에 갑자기 성능이 떨어지는 일을 방지함.

 


동작 방식은 아래와 같다.

 

  • 초기화 단계: 일정 개수의 객체를 미리 생성하고 풀에 저장
  • 할당(Get): 객체가 필요하면 풀에서 “사용 가능 객체”를 꺼냄
  • 반환(Release): 사용을 마친 객체를 초기 상태로 되돌린 뒤 다시 풀에 넣음
  • 확장(Optional): 필요량이 많으면 풀의 크기를 늘릴 수도 있음

한번에 탄환을 10개 발사한다면 10개의 탄환 프리펩을 미리 활성화시켜두고 사용하고 다시 반환하고 다시 활용하는

방식으로 효과적으로 메모리를 관리할 수 있게 된다.

 

총알이 발사되거나 부딪힐 때의 이펙트처리도 같이 처리한다면 더욱 좋은 효과를 볼 수 있을 것으로 기대된다.

 

총알 프리펩 및 사운드, 효과 등 을 어드레서블로 등록시켜서 사용한다면

로딩이나 데이터관리 측면에서도 같이 시너지를 낼 거 같다.

 


무기와 장착 시스템/ 아이템 드롭을 바로 주웠을 때 빈 슬롯에 자동 장착하는 기능 등 다양하게 활용해보고

이벤트버스나 Queue 활용 등 다양한 패턴들을 활용해서 잘 만들어보고자 한다.