• 💡 게임 개요

    ✨ 장르

    • TPS
    • 생존

    📱 플랫폼

    • Windows

    ⏰ 개발 기간

    • 게임 플레이 : 2024-02-21 ~ 2024-11-20
    • 기타 리팩토링 및 유지보수: 2025-04-03 ~ 진행중
  • 💡 게임 개요

    🛠 사용 도구

    • Unreal 5.3
      • Unreal Network: 네트워크 환경 구현에 사용
      • Chaos Vehicles: 탈것 기능 구현에 사용
  • 💡 게임 개요

    👤 담당

    • 아이템 시스템 프로그래밍
    • 탈것 이동 프로그래밍
    • 저장, 불러오기 기능 프로그래밍
    • 기타 코드 리팩토링
    • RestAPI를 이용한 인공지능 API 사용

    🏆 수상

    • 2024년 경북형 인재양성-취업연계 메타버스 아카데미 프로젝트 챌린지 우수상
  • 📖 게임 소개

    Bottomless는 좀비가 창궐한 포스트아포칼립스 세계에서 생존하는 생존 FPS 게임입니다. 허기, 갈증 수치를 보완하기 위해 아이템을 수집, 조합, 사용하며 생존합니다. 서바이벌 모드와 데스매치 모드를 제공합니다.

  • 🛠️ 주요 기능 및 기여

    🧪 아이템 정보 관리

    • 싱글톤 패턴으로 구현된 ItemManager을 통해 아이템, 아이템 조합 정보 접근의 일관된 경로 제공
    • 아이템 정보를 FItemMetaDataFItemData로 분리하여 저장, 관리
      • FItemMetaData에 아이템의 이름, 아이콘, 설명 저장
      • FItemData에 아이템 효과를 문자열로 저장
      • 메타 데이터에만 필요한 경우 불필요한 아이템 효과 데이터 로딩 방지
        • 메모리 사용량 최적화 및 조회 성능 향상
  • 🛠️ 주요 기능 및 기여

    🧪 아이템 정보 관리

    • 아이템 효과를 인터페이스로 추상화
      • 예시: 체력 회복, 갈증도 회복, 허기 회복
      • 새로운 아이템 효과 추가의 용의성 확보
      • 팩토리 패턴을 이용하여 문자열로 저장된 아이템 효과를 인스턴스화
        • 코드 수정 없이 데이터만으로 새로운 아이템 효과 추가/변경할 수 있는 유연성 확보
  • 🛠️ 주요 기능 및 기여

    🧪 아이템 정보 관리

    • 아이템 조합 정보 관리
      • 아이템 조합 정보를 FItemConbinationData에 저장
        • 조합에 사용되는 두 아이템의 ItemCode와 조합에 필요한 두 아이템의 개수
      • 아이템 조합에 사용되는 두 ItemCode의 합 문자열을 키로 하는 TMap을 이용하여 조합 레시피를 효율적으로 탐색
        • 문자열의 합은 두 ItemCode 중 정렬 상 앞서 나오는 ItemCode를 앞으로 하여 합성
          • 여러 아이템 조합 확인 과정을 감소
        • TMap<FString, FItemCombinationDatas>
    • 인벤토리 구현
      • Item Code를 키, 아이템 개수를 Value로 하는 TMap을 이용하여 인벤토리 구현
  • 🛠️ 주요 기능 및 기여

    🚗 탈것 시스템 구현

    • Chaos VehiclesAWheeledVehiclePawn에 차량 탑승, 하차 기능 구현

    💾 저장 및 불러오기 기능 구현

    • SaveData를 이용하여 플레이 데이터 저장
    • 서버의 진행 상황은 서버에, 각 플레이어의 정보는 클라이언트에 저장
      • 데디케이트 서버에서 플레이어의 일관적인 경험 보장을 위해 플레이어 정보를 클라이언트에 저장
  • 🛠️ 주요 기능 및 기여

    🔥 리팩토링: PlayerController 기능 컴포넌트화

    • 개선 전: PlayerController의 모든 기능을 상속한 한 클래스에 구현
      • PlayerController별로 코드의 길이가 김 => 가독성이 떨어짐
      • 코드의 유연성이 떨어짐
    • 개선: PlayerController의 기능을 항목별로 컴포넌트에 분리하여 구현
      • 전략 패턴을 적용
      • 입력 처리, 조작 액터 변경 시 처리 이벤트, Tab 키 발생 이벤트 등을 컴포넌트에 나누어 구현
      • 코드 가독성 및 재사용성 확보
      • 기능 변경 시 유연성 확보
  • 🛠️ 주요 기능 및 기여

    🔥 리팩토링: 캐릭터 컴포넌트 네트워크 의존성 제거

    • 개선 전: 캐릭터 컴포넌트가 언리얼 네트워크를 사용하도록 강제됨
      • 네트워크 처리 및 캐릭터 컴포넌트의 역할이 분리되지 못함
      • 코드 가독성이 떨어짐
    • 개선: 캐릭터 컴포넌트의 핵심 로직을 기본 클래스로 정의하고, 네트워크 관련 로직은 이를 상속받은 별도의 네트워크 전용 컴포넌트에서 구현
      • 네트워크 처리 및 캐릭터 컴포넌트의 기능 분리
      • 네트워크 의존성을 제거
        • 네트워크 시스템 변경 시 기존 캐릭터 로직의 수정 없이 대응 가능
      • 코드 가독성 확보
  • 🛠️ 주요 기능 및 기여

    🔥 리팩토링: 무기 기능 컴포넌트화

    • 개선 전: 무기와 관련된 모든 기능을 AWeapon 클래스에 구현
      • 기존 코드로 제공되지 않는 새로운 형태 무기 개발에 비용 소모
        • 산탄총의 조준방식 + 투사체의 피격 판정
      • 코드 가독성이 떨어짐
    • 개선: 무기와 관련된 기능을 항목에 따라 컴포넌트로 분리
      • 전략 패턴을 적용
      • 조준 방식, 피격 판정 방식, 조준 효과 컴포넌트 분리
      • 컴포넌트가 단일 책임을 갖도록 설계
      • 새로운 형태 무기 개발 비용 감소
        • 기존 컴포넌트 재사용을 통해 개발 가능
      • 코드 가독성 개선
  • 🛠️ 주요 기능 및 기여

    🔥 리팩토링: AI의 행동 선택을 컨트롤러에서 처리

    • 개선 전: AI의 행동 선택을 액터에서 처리
      • 적 캐릭터로 지정한 경우 플레이 불가능
    • 개선: AI의 행동 선택을 컨트롤러에서 처리
      • 전략 패턴을 적용
      • 적 캐릭터로 고정되었던 캐릭터도 사용자 조작 가능
        • 플레이 가능한 캐릭터 수 증가