[공모전 수상작]
본 프로젝트는 NC AI가 주관한 제 2회 VARCO Voice 활용 게임제작 공모전에서 우수상을 수상한 프로젝트입니다.
| 분류 | 내용 |
|---|---|
| 개발 기간 | 2025.12 ~ 2026.01 (약 4주) |
| 개발 인원 | 4인 (Team. 행운의 토끼발) |
| 엔진 버전 | Unreal Engine 5.6 |
| 대상 플랫폼 | PC(Window) |
| 핵심 기술 | NC VARCO Voice AI(TTS) |
Last Requiem 은 포스트 아포칼립스 세계관을 배경으로 한 전략 디펜스 게임입니다. 플레이어는 오퍼레이터가 되어 드론을 통해 전장을 내려다보며, 외계 생명체의 침입으로부터 최후의 방어선을 사수해야 합니다. 단순한 유닛 컨트롤을 넘어, 전장의 공포로 인해 통제 불능 상태에 빠지는 병사들의 정신력(Sanity) 을 관리하는 것이 핵심입니다.
| 분류 | 내용 |
|---|---|
| 장르 | 전략/디펜스 |
| 시점 | 3인칭 백뷰 |
| 핵심 컨셉 | 드론 기반 전장 탐색 유닛 정신력 관리 전략판을 활용한 전략적 유닛 배치 |
git clone https://github.com/jbaem/Last-Requiem.git
# .uproject 파일을 우클릭하여 Generate Visual Studio project files 실행
# .sln 파일을 열어 Development Editor 구성으로 빌드 (Win64)공모전 취지에 맞는 Varco Voice 를 활용하기 위해, python으로 REST API 호출 ....
Repository: Last-Requiem-Varco-Voice
| 기능 | 관련 코드 | 설명 |
|---|---|---|
| TTS | varco_tts | Varco Voice Generate API 를 사용하여 엑셀 파일에 작성한 파라미터에 따라 보이스 에셋을 생성합니다. |
| 성우 리스트 | get_voices | Varco Voice 에 필요한 파라미터 중 성우 이름/UUID를 목록화하기 위한 코드입니다. |
| 기능 | 관련 클래스 | 설명 |
|---|---|---|
| 게임 흐름 관련 | ALR_GameMode AP_GameStateBase |
게임의 상태가 변할 때 델리게이트를 발송하여, 액터 및 UI 등 다른 오브젝트에게 알립니다. |
| 스코어 보드 UI | UP_ScoreBoard | 게임의 결과 레벨로 이동했을 때 유저에게 보여진 UI로 GameInstance에 저장된 점수 정보를 바탕으로 계산하여 출력합니다. |
| 기능 | 관련 클래스 | 설명 |
|---|---|---|
| 적 몸체 | AP_EnemyBase | 데이터 에셋을 입력 받아 스탯 및 이펙트를 적용할 수 있습니다. |
| 타겟 탐색 Service | UP_BTS_SelectTarget | 언리얼에서 제공하는 AI 인식(Sight Perception)을 사용하여 공격 대상을 리스트업합니다. 태그와 거리 기준으로 공격할 적을 탐색합니다. 이미 파괴된 적에 대한 추가 검증을 진행합니다. |
| 공격 거리 체크 Service | UP_BTS_CheckAttackRange | 경계값에서 발생할 수 있는 지터링(Jittering)을 방지하기 위해 공격을 멈추는 거리를 약간 부여했습니다. |
| 기능 | 관련 클래스 | 설명 |
|---|---|---|
| 드론 기능 보완 - 기울임 보정 - 넉백 감쇠 |
AK_Drone | [ line:124 ] 내적과 보간을 사용하여 현재 속도 기준으로 기울임을 처리합니다. [ line:152 ] 충격이 발생했을 경우 일시적으로 감쇠(Damping)을 조정하여 날라가는 거리를 조절하였습니다. |
빠른 프로토타이핑이 필요한 공모전 특성에 맞춰, 개발자별 이니셜 폴더를 최상위에 배치하요 코드 충돌을 방지하고 독립적인 작업환경을 구축했습니다.
각 폴더 내부에서는 기능별로 계층 구조를 세분화하여 관리했습니다.
Lunar_Realm/
├── Config/ # 프로젝트 설정 파일 (.ini)
├── Source/LunarRealm/ # C++ 소스 코드 (Public / Private)
├── Content/ # 언리얼 에셋 (Blueprint, Material, DT 등)
└── Image/ # README 및 문서용 이미지 에셋
폴더 구조 상세 보기
빠른 프로토타이핑이 필요한 공모전 특성에 맞춰,
개발자별 이니셜 폴더를 최상위에 배치하요 코드 충돌을 방지하고 독립적인 작업환경을 구축했습니다.
각 폴더 내부에서는 기능별로 계층 구조를 세분화하여 관리했습니다.
Source/LunarRealm/Private/
├── PJB/ # 게임 플로우 / 적
│ ├── AI/ # AI Controller, Behavior Tree 노드 (Service, Task, Decorator)
│ ├── AnimNotify/ # 애니메이션 이펙트 트리거
│ ├── Component/ # 전투 컴포넌트
│ ├── Copyright/ # 에셋 저작권 표시 UI
│ ├── Data/ # 열거형, 데이터 에셋 정의
│ ├── Enemy/ # 적 Base 클래스, 애니메이션
│ ├── Fortress/ # 아군 기지
│ ├── LevelSelector/ # 맵 이동 관련 UI 로직
│ ├── Obstacle/ # 파괴 목표물
│ ├── Pause/ # 일시정지 및 튜토리얼 앨범
│ ├── ScoreBoard/ # 최종 점수 표시
│ ├── Spawner/ # 스포너
│ ├── System/ # GameState (정비/웨이브 상태 및 점수 상황)
│ └── TimerUI/ # 페이즈 및 타이머 UI
├── BJM/
├── KHS/
└── KWB/
- 모든 외부 리소스는
Content/Asset/하위에서 임포트한 에셋 유형별로 분류하여 관리했습니다.- 에셋 네이밍은 언리얼 표준 접두사 규칙(
M_Material,WBP_Widget Blueprint 등)을 준수하여 리소스 탐색 효율을 보장했습니다.
팀 내 코드 가독성과 협업 효율을 위해 공식 언리얼 엔진 C++ 코딩 표준을 준수했습니다.
클래스 및 파일명에 작업자 이니셜 접두사 를 부여하여 협업 시 발생할 수 있는 소스 코드 충돌을 원천 차단하고 책임 개발 영역을 명확히 했습니다.
main: 최종 패키징을 위한 안정화 브랜치develop: 각 기능들의 통합 및 QA를 진행하는 개발 브랜치feature/: 기능 단위 독립 개발 브랜치 (ex.feature/character,feature/ui)
모든 커밋은 프로젝트 변경 내용을 직관적으로 파악할 수 있도록 아래 접두사(Prefix) 규칙을 따릅니다.
| 타입 | 설명 |
|---|---|
feat |
새로운 기능 추가 |
fix |
버그 수정 |
docs |
문서 수정 |
refactor |
코드 리팩토링 |
test |
테스트 코드 |
rename |
파일 및 폴더 이름 수정 및 경로 이동 |
remove |
파일 삭제 |


