[UE5] 익스트랙션 슈터 개발 기록: 프로젝트 소개

게시:     수정

카테고리:

태그: , ,

📌 이 시리즈의 표지입니다. 개별 개발 기록은 DevLog 카테고리에서 날짜순으로 볼 수 있습니다. 완성된 시스템만 보려면 프로젝트 소개 페이지가 더 빠릅니다.
👾 깃허브
📋 기획

EmploymentProj

UE5 C++ 멀티플레이어 익스트랙션 슈터. 템플릿, 블루프린트 없이 C++로 바닥부터 설계했다.


프로젝트 소개

채용공고의 필수/우대 요건을 주장이 아니라 동작하는 시스템으로 증명하는 프로젝트다. “무슨 클래스를 썼다”가 아니라 어떤 판단을 내렸고 왜 그렇게 했는지를 표 오른쪽 칸에 적었다.

필수요건

요구사항 이 프로젝트에서 내린 판단 글
UE Gameplay Framework 이해 매치 상태를 AGameMode 내장 상태머신에 얹고, 클라가 알아야 할 것만 GameState로 승격 1-1, 1-3
게임모드 및 기믹 개발 ChoosePlayerStart 오버라이드로 중복 없는 랜덤 스폰, 매치 타이머로 EndMatch 트리거 1-3, 1-4
Replication 기반 네트워크 개발 Sprint를 Server RPC에서 CMC CompressedFlags로 이관, RPC와 복제 변수를 없애고 기존 플래그 바이트의 빈 비트로 대체 2-1
서버-클라이언트 동기화 이해 히트 판정 전량 서버 권한 + 본 단위 히트박스 리와인드, 시계는 GetServerWorldTimeSeconds()로 통일 3-1~3-3
C++ 심층 이해 CMC SavedMove 확장, FObjectInitializer로 기본 서브오브젝트 교체, FBodyInstance 직접 조작 2-1, 3-2

우대요건

요구사항 이 프로젝트에서 한 것
서버 권한 아키텍처 전 게임 로직 서버 판정. 클라는 요청과 표현만 담당
GAS 활용 AttributeSet(Health/MaxHealth/MoveSpeedMultiplier), GameplayEffect 데미지 파이프라인, 어빌리티 7종: Skill 3종(Dash/Heal/ShieldOn) + Death / Interact / Item_PrimaryUse / Item_Reload
Data-Driven 설계 3계층 구조, FEPItemData(DataTable Row) → UEPItemDefinition(DataAsset) → 런타임 상태. ItemId로 연결
버전 관리 단계별 feature 브랜치(feature-gas, feature-loot), 단계 완료 시 태그(step5-2)

검증 범위를 분명히 해둔다. 설계 목표는 2~8인이지만 실제로 확인한 것은 PIE 다중 클라이언트 2인 동시 접속까지다. 데디케이티드 서버 타깃(*Server.Target.cs)은 아직 분리하지 않았고, Listen Server 구성으로 서버 권한 경로를 검증했다.


게임 컨셉

“취업”을 테마로 한 1인칭 익스트랙션 슈터.

flowchart LR
    A[매치 시작] --> B[랜덤 스폰]
    B --> C[파밍: 루팅 + 자판기]
    C --> D[교전: PvP/AI]
    D --> E[탈출]
    E --> F[보상]
  • 자판기: 돈 투입 → 5초 대기(소리로 위치 노출) → 확률 아이템 배출
  • 퀘스트 아이템(이력서, 자격증 등)을 모두 수집하면 “취업 성공”
  • 사망 시 소지품 전부 손실, 탈출 성공 시 보존

타르코프를 참고했고, 그래서 정보 은폐가 설계의 축이다. 남은 플레이어 수, 상대 HP, 내 킬 수는 전부 공개하지 않는다. 이 결정이 복제 조건(COND_OwnerOnly) 선택으로 그대로 이어진다. → 이 게임의 복제 설계 전부


참고

기술 스택
   
엔진 Unreal Engine 5.7
언어 C++ (게임플레이 로직 100%)
네트워크 서버 권한 모델, UCharacterMovementComponent 예측 확장
빌드 MSVC (Visual Studio Build Tools 2022)
IDE JetBrains Rider
버전 관리 Git, 단계별 feature 브랜치 + 완료 태그
프로젝트 구조
UE5-EmploymentProj/
├── CLAUDE.md
├── README.md
├── DOCS/
│   ├── DOCS.md          # 기술 로드맵 (채용공고 요건 → 구현 매핑)
│   ├── GAME.md          # 게임 디자인 문서
│   ├── Mine/            # 주제별 설계 노트 (TickGroup, Dormancy, …)
│   └── Notes/           # 단계별 구현서 + STATUS
│       ├── 01/ 02/ 03/ 04/ 05/
└── EmploymentProj/
    └── Source/EmploymentProj/
        ├── Public/      # 기능별 분리 (Core/ Combat/ Movement/ GAS/ Data/ Loot/ …)
        └── Private/     # Public 구조를 그대로 미러링

각 단계 폴더에는 구현서와 *_STATUS.md를 따로 둔다. 구현서는 예정을 적고, STATUS는 실제로 동작하는 것만 적는다. 진행 상태의 진실은 항상 STATUS 쪽이다.

빌드 명령어
# 프로젝트 파일 생성
UnrealBuildTool.exe -projectfiles \
  -project="EmploymentProj/EmploymentProj.uproject" -game -engine

# Development Editor 빌드
UnrealBuildTool.exe EmploymentProj Win64 Development \
  -project="EmploymentProj/EmploymentProj.uproject"

멀티플레이 확인은 에디터에서 Play → Net Mode: Play As Client, Number of Players: 2로 한다.

DevLog 카테고리 내 다른 글 보러가기

댓글남기기