언리얼 공부/C++

FPS무기 구조 생각

jeongchanhyo 2025. 2. 17. 20:27

나는 FPS게임의 무기를 만들것이다.

내가 만드려고하는 무기 종류는 총 3종류 소총, 스나이퍼, 로켓런처다.

처음에 구조를 짜려고 하니 감이 안잡혀서 이런 저런 글들을 찾아봤다.

나는 무기, 공격 전략, 총알 이렇게 총 3개로 나눠보았다.

1. 무기

무기는 우선 무기의 기본적인 스탯들을 담당한다.

공격력, 최대 장탄 수, 현재 장탄 수, 장전, 최대 보유 가능 탄약 개수, 현재 보유중인 탄약 개수 등의 어떤 종류에도 필수로 들어가야하는 것들을 넣어 베이스 무기를 만들것이고 이걸 팩토리 패턴을 이용하여 다양한 종류의 무기를 쉽게 만들 수 있도록 할 것 이다. 복습하자면

팩토리 패턴이란?

공장에서 물건을 찍어내듯 객체를 생성하는 방식이라고 보면 된다.

공장에서 단 하나의 제품만을 찍어내지 않지만 같은 종류의 같은 카테고리의 물건들을 찍어내기 때문에 그런 느낌으로 보면 된다.

팩토리 패턴을 사용하는 이유

  1. 무기 종류가 많고 다양할 때
  2. 무기 생성 조건이 다양할 때
  3. 무기 추가 및 변경이 용이해야 할 때

사실 이게 그리 적합하지는 않다. 하지만 우리의 게임성을 보았을 때 미래지향적으로 사용할 가치는 충분하고 이럴 때 연습해보는게 좋겠다고 생각하여 팩토리 패턴으로 해볼 생각이다.

 

2. 공격 전략

공격 전략은 스나이퍼의 줌, 로켓런쳐의 차징샷 등의 공격 발동 트리거나 특수한 능력을 가지고있는 녀석들을 처리하기 위함이다. 이것은 전략패턴을 이용하여 다양한 공격방식을 가질 수 있도록 할 것이다.

전략 패턴이란?

특정 행동(알고리즘)을 캡술화하여 꺼내 사용할 수 있게 만든다.

롤이라면 이니쉬, 카이팅, 스플릿 이런것들이 담겨있는 느낌이다.

전략 패턴을 사용하는 이유

  1. 다양한 행동이 필요할 때
    1. 예를 들면 스나이퍼의 경우 그냥 일반 공격과 줌 공격을 사용할 수 있고, 총의 경우 단발모드와 연발모드가 필요할 수 도있는데 그럴 때 이 전략패턴이 정말 유용해진다. 
  2. 코드의 가독성과 유지보수성

무기는 1개의 무기마다 1개의 행동 방식만 가진다면 필요없을 수 있지만. 이 게임의 장르 특성상 이렇게 확장성을 열어놓는게 좋다고 판단하여 열어두었다.

3. 탄환

탄환 또한 일반탄환은 구조물에 부딪히거나 적에게 부딪히면 사라지고, 스나이퍼가 사용하는 관통탄환은 적은 뚫고 지나가고, 로켓런쳐에 들어가는 미사일은 구조물이나 적에게 부딪히면 터지면서 주변에 피해를 입히기 때문에 

이것 또한 전략패턴을 사용할 것이다.

 

간단하게 이미지로 만들면 이렇게 된다.

어떤 패턴을 쓸지, 어떻게 만들지 생각하는 상상코딩만으로도 힘들지만 사전에 이런 생각을 하는것이 결국은 완성도를 높이고 시간을 줄여주기 때문에 꼭 제대로 하자.