[내일배움캠프 본 캠프 45일차] 팀프로젝트 1일차

2025. 12. 1. 21:21본 캠프

 

 

오늘은 오브젝트 풀을 활용한 무기 구현을 시도해봤다.

오브젝트 풀이라는 거 자체가 미리 프리펩화 된 오브젝트들을 가지고 와서 사용하고 회수한 뒤 다시 사용하는

효율적인 구조를 가지고 있기 때문에 총알 뿐만이 아니라 여러 방면에서 사용이 가능한 게 장점이다.

 


 

이번 프로젝트에서 특히 고민되는 점 중에 하나는 오브젝트 풀 매니저를 통해 어떻게 데이터를 접근 할 것이고

묶어서 관리할 것인가에 대한 부분이다.

 

지금 같은 경우에는 매니저 스크립트 안에서 Serializable을 통해 데이터 클래스(풀링 오브젝트 구별용)을 넣었지만

추후에 확장 됨에 따라 SO로 따로 빼서 관리하는 게 더 용이하다고도 느껴진다.

 

나아가서는 PoolData를 묶음으로 가지고 있는 List도 SO로 빼서 더 면밀하게 관리할 수 있는 부분도 확장성으로서 좋아보였다.

 

프로토타입을 목표로 제작함에 있어서 고려해야 될 점은 어떤 것이 있을까

 

빠르게 기획자가 의도한 바를 보여주는 것에 초점을 맞춰야 하는데, 확장성을 고려하지 않아도 되는 걸까?

 

데이터 테이블을 활용함에 있어 기획자와 어떤 식으로 소통을 해야할까?

 

단순 무기의 기능을 구현하고 있지만 플레이어가 무기사용의 주체가 된다면 Input값을 어떻게 받아 올 것인가?

 

여러 고민들이 계속해서 생겨나는 부분이다.

 


트러블 슈팅_ 무한히 생성되는 탄환

 

 

 

 

무기가 한번 클릭으로 인해 발사 될 때마다 10개의 탄환을 발사한다고 설정하고

오브젝트 풀 매니저에서도 첫 오브젝트를 10개 생성하도록 걸어두었지만 발사할 때마다 10개씩 탄환이 점점 늘어나버렸다.

 

ObjectPool은 어디까지나 처음 내가 활용할 오브젝트의 갯수를 불러오는 데 무기는 클릭 때마다 10개씩 탄환이 필요하다고 하니

이런 현상이 생겼는데, 이를 해결하기 위해서는 여러가지 방법이 있다.

 

1. 탄환 갯수 자체의 제한을 걸 것.

 

2. 한번 발사할 때마다 사용하는 탄환의 양과 발사 인풋의 쿨타임을 통해 조절 할 것.

 

우리가 흔히 하는 FPS게임에서는 총기 별로 탄환의 갯수를 정해 놓곤 한다.

 

1초에 10발씩 나가는 FPS게임의 경우 최대 소모속도에 맞춰서

한번에 그만큼 맞춰서 탄환 오브젝트를 로딩시켜두는 방식을 사용한다.

 

지금 프로젝트에서 나는 단순히 '발사' '회수'만을 생각했기 때문에 일어났던 문제였다.

 

게임 자체에 탄창이나 제한 발사라는 개념이 없다보니 오브젝트 풀링을 통해 재활용하는게 무용지물이게 될 수 있기 때문에

해당 데이터를 직접 적용해보면서 어느정도로 미리 생성할 것인지에 대한 계산을 해두어야 한다.

 


탄환에 데미지가 있지만 무기가 바뀌게 되면 탄환도 바꿔야 하는걸까?

 

동일한 탄환을 다른 방식으로 공격을 하게 된다면 데미지 처리는 어떻게 바꿔야 할까?

 

원거리 공격 기능 하나를 만드는데도 수많은 물음표가 띄워지는 하루였다.

 

데이터 관리, 확장성, 팀원의 결과물과 충돌나지 않도록 하기, 유니티 생명주기 등 고려야해야 될 것이 점점 많아지면서

고민도 점차 늘어난다.