1. 게임 개요
게임 소개
컨셉 및 레퍼런스
- 게임 이름: NeoSanctum
- 배경 분위기: 미래형 전투 또는 포스트 아포칼립스
- 전투 스타일: 근접 + 원거리를 두루 사용하는 3인칭 액션
- 조작 느낌: 구르기 / 대쉬를 활용한 소울라이크적 회피감
- 인원: 최대 4인 협동 멀티플레이 (캐릭터 중복 선택 허용)
| 우리 게임 요소 |
레퍼런스 게임 |
참고 포인트 |
| 파츠 시스템 |
사이버펑크 2077 |
부위별 파츠 장착으로 능력 강화 |
| 엘리트 처치 → 증강 선택 |
Hades |
챔버 클리어마다 3선택지 중 1개 선택 |
| 레벨업 증강 선택 |
LOL |
경험치 획득, 레벨업 시 3선택지 중 1개 선택 |
| 전설 등급 메커니즘 변형 |
건파이어 리본 |
캐릭터 전용 어센션으로 플레이 스타일 변형 |
| 영구 강화 시스템 |
Shape of Dreams |
런 종료 후 스킬 트리 해금 구조 |
핵심 재미
NeoSanctum의 루프 구조
NeoSanctum은 3개의 중첩된 루프로 구성된다.
┌─────────────────────────────────────────────────────┐
│ MACRO LOOP (메타 루프) ─ 아웃 런 / 거점 │
│ ┌───────────────────────────────────────────────┐ │
│ │ MID LOOP (런 루프) ─ 스테이지 진행 │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ MICRO LOOP (전투 루프) ─ 룸 전투 │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
MICRO LOOP — 전투 루프 (룸 단위, 수십 초)
"지금 이 싸움이 재밌는가?"
핵심 동사(Core Verb): 조준하고 → 회피하고 → 쏜다
[행동] 이동 / 조준 / 사격 / 구르기(UGA_Dodge)
↓
[도전] 적의 공격 패턴 / 체력 압박 / 쿨타임 관리
↓
[보상] 적 처치 피드백 (히트 리액션, 카메라 쉐이크)
경험치, 재화 드랍 / 엘리트, 보스 처치 시 → 증강 선택 트리거
↓
[반복] 다음 적 / 다음 룸으로 이동
| 요소 |
내용 |
| 핵심 행동 |
이동 + 구르기(회피) + 사격 / 스킬 사용 |
| 즉각 피드백 |
히트 스캔 / 투사체 명중 반응, 크리티컬 오버레이 HUD |
| 즉각 보상 |
처치 효과음 / 파티클, 골드 획득, 체력 회복 아이템 |
| 긴장 요소 |
쿨타임, 실드/체력 압박, 다중 적 처리 |
MID LOOP — 런 루프 (스테이지 단위, 수십 분)
"이번 런의 빌드를 어떻게 가져갈 것인가?"
[거점 출발]
→ 캐릭터 선택 + 파츠 장착 (파츠 기술자 해금 후)
↓
[스테이지 진입]
→ 룸 전투 반복 (MICRO LOOP)
↓
[분기 선택]
→ 레벨업 / 엘리트,보스 처치 → UAugmentInstance 증강 선택(노말/고급/희귀/전설)
→ 보물상자 오픈 → 증강 선택 or 골드 획득
→ NPC 상점 → UPartItemInstance 파츠 구매 / 업그레이드 / 리롤
↓
[보스 처치]
→ 다음 스테이지 진행 또는 런 클리어
↓
[결과]
→ 클리어 or 전멸 → 거점 귀환
| 요소 |
내용 |
| 핵심 선택 |
증강 조합 / 파츠 선택 / 골드 운용 |
| 단기 보상 |
증강 스택 강화, 파츠 장착으로 즉각 능력 변화 |
| 긴장 요소 |
등급에 따른 증강 등장 확률 , 리롤 비용, 체력 관리 |
| 변동성 |
매 런마다 다른 증강 조합 → 다른 빌드 경험 |
증강 선택이 런 루프의 핵심인 이유
처음 픽한 증강
→ 이후 선택지를 보는 시야가 달라진다
→ 조합을 고려한 2번째, 3번째 픽
→ 전설 증강 등장 시 빌드 방향 전환
→ "이번 런은 어떤 빌드로 완성됐는가?"
Current Augment List UI를 선택창에 함께 표시하여
현재 보유 증강과 새 선택지의 시너지를 플레이어가 직접 판단하도록 유도한다.
MACRO LOOP — 메타 루프 (세션 단위, 장기)
"런이 끝나도 내 캐릭터는 성장해 있는가?"
[런 종료 (클리어 or 전멸)]
→ 스킬 재화 / 공통 재화 획득
→ FNPCUnlockData (NPC 구출 진행도) 저장
↓
[거점 귀환 — 아웃 런]
→ 공통 영구 스킬트리 강화 (공통 재화 소모)
→ 캐릭터 스킬트리 강화 (스킬 재화 소모)
→ NPC 구출로 거점 기능 해금
├── 파츠 기술자 구출 → 런 시작 시 파츠 장착 가능
├── 전투 교관 구출 → 캐릭터 스킬트리 해금
└── 동료 NPC 구출 → 동료 AI 기능 업그레이드
↓
[다음 런 출발]
→ 강화된 스탯 + 새로운 파츠 조합으로 이전보다 유리한 출발
| 요소 |
내용 |
| 핵심 선택 |
어느 캐릭터 / 스킬트리에 재화를 투자할 것인가 |
| 장기 보상 |
스킬트리 강화 누적 → 다음 런이 더 유리해지는 성장감 |
| 콘텐츠 해금 |
NPC 구출 → 거점 기능 확장 → 런 경험 자체가 넓어짐 |
| 동기 유지 |
전멸해도 재화는 남는다 → "이번 런이 헛되지 않았다"는 감각 |
3개 루프의 관계
MICRO LOOP 결과물 → MID LOOP에 영향
──────────────────────────────────────────
처치 → 골드 획득 → 파츠 구매 / 업그레이드 / 리롤 비용
레벨업, 보스 엘리트 처치 → 증강 선택 트리거
보스 처치 → 다음 스테이지 진입
MID LOOP 결과물 → MACRO LOOP에 영향
──────────────────────────────────────────
스테이지 클리어 → 스킬 재화 n개 보장 획득
런 종료 (클리어/전멸) → 영구 재화 획득
NPC 구출 달성 → FNPCUnlockData 저장 → 거점 해금
MACRO LOOP 결과물 → 다음 MICRO/MID LOOP에 영향
──────────────────────────────────────────
스킬트리 강화 → 캐릭터 기본 스탯 상향
거점 해금 → 런 시작 조건 확장 (파츠 장착 등)
펫 기능 업그레이드 → ANSHelperCharacter 전투 보조 강화
루프별 플레이어 동기
| 루프 |
시간 단위 |
핵심 질문 |
동기 원천 |
| MICRO |
수십 초 |
이 적을 어떻게 잡을까? |
전투 조작감 / 즉각 피드백 |
| MID |
수십 분 |
어떤 빌드로 런을 완성할까? |
빌드 다양성 / 선택의 긴장감 |
| MACRO |
수 시간~장기 |
내 캐릭터를 어떻게 키울까? |
영구 성장 / 콘텐츠 해금 |
루프 설계 원칙
1. 핵심 동사는 그 자체로 재밌어야 한다
UGA_Dodge(구르기)와 UGA_RangerShoot(사격)은 스킬트리나 증강 없이도
빈 방에서 반복해도 재밌는 느낌이어야 한다.
모든 상위 루프는 이 기반 위에서만 의미를 가진다.
2. 모든 선택은 다음 선택을 만들어야 한다
첫 증강 선택이 두 번째 선택의 맥락을 만들고,
파츠 선택이 빌드의 완성도를 바꾸며,
스킬트리 투자가 다음 런의 캐릭터 선택에 영향을 준다.
선택은 독립된 이벤트가 아니라 연쇄 반응이어야 한다.
3. 전멸은 실패가 아니라 루프의 일부다
런이 전멸로 끝나도 재화와 NPC 구출 진행도는 유지된다.
"이번 런에서 무엇을 배웠고, 무엇을 얻었는가"가
다음 런 출발의 동기가 된다.
4. 루프 간 피드백은 즉각적이고 가시적이어야 한다
스킬트리 강화 후 다음 런에서 수치 변화가 체감되어야 하고,
증강 선택 후 전투 느낌의 변화가 바로 느껴져야 한다.
보상의 효과가 지연되거나 불명확하면 루프가 끊긴다.
용어 정리
| 용어 |
설명 |
런
|
런 : 여러 개의 스테이지로 구성된 게임 플레이 단계
- 인 런 : 게임 플레이 단계
- 아웃 런 : 정비 및 거점 단계
|
| 스테이지 |
스테이지 : 여러 개의 룸으로 구성된 게임 플레이 맵 |
| 룸 |
룸 : 스테이지를 구성하는 게임 플레이 구역 |
영구 재화
|
영구 재화 : 인 런에서 획득하여 아웃 런에서 사용 가능한 저장되는 재화
- 공통 재화 : 공통 스킬트리를 강화하기 위해 사용하는 재화
- 스킬 재화: 캐릭터 스킬트리를 강화하기 위해 사용하는 재화
|
| 임시 재화 |
임시 재화 : 인 런에서 획득하여 사용하는 휘발성 재화 |
스킬트리
|
스킬트리 : 인 런 불변 수치 강화
- 공통 스킬트리 : 공통 재화 사용 강화, 스킬 당 사용 재화량 증가
- 캐릭터 스킬트리 : 기술 재화 사용 강화, 캐릭터 당 사용 재화량 증가
|
| 파츠 |
파츠 : 아웃 런 선택, 인 런 가변 수치 강화 |
| 증강 |
증강 : 인 런 무작위 등장 수치 및 기믹 강화 |
2. 전체 게임 플로우
거점 출발
→ 캐릭터 선택 (중복 허용)
→ 아웃 런 스킬트리, 파츠, Companion 적용 (해금 시)
→ 스테이지 진입
→ 목표 수행
→ 레벨 업, 엘리트 처치, 보스 처치 → 강화 선택 (증강)
→ 보물상자 오픈 → 강화 선택 or 골드 획득
→ 상호작용 NPC → 파츠 업그레이드, 옵션 리롤 / 유저 부활 / 상점
→ 보스 처치 → 다음 스테이지 진행
→ 클리어 또는 전멸
→ 거점 귀환
→ 영구 재화 저장
→ 플레이 기록 저장
→ NPC 구출 진행도 저장
→ 다시 출발 (런 반복)
3. 프로토타입 개발 범위 (1~2주)
프로토타입 개발 리스트
| 항목 |
관련 클래스 |
내용 |
| 캐릭터 이동 |
|
|
| + 구르기/대쉬 |
NSBaseCharacter, UGA_Dodge |
조작감 검증 |
| 캐릭터 애니메이션 |
|
|
| 기초 세팅 |
NSBaseCharacter |
상하체 분리 + 모션 매칭 플러그인 |
| 원거리 전투 1종 |
UGA_RangerShoot / Rocket / Grenade |
전투 재미 검증 |
| GAS 구조 세팅 |
UNSAbilitySystemComponent, UNSBaseAttributeSet |
ASC · 어트리뷰트 · Input 분리 |
| 일반 몬스터 (단순 추적) |
ANSRushEnemy, ANSGroundAIController |
전투 상대 최소 구현 |
| 몬스터 데이터 구조 |
UNSEnemyDataAsset, UNSMonsterAttributeSet |
DataAsset 기반 Enemy 데이터 관리 |
| 리슨 서버 2인 연결 |
ANSRunGameMode |
멀티플레이 가능성 조기 검증 |
| 게임루프 |
ANSOutGameMode → ANSRunGameMode |
타이틀 → 거점 → 런 →거점 복귀 |
| 흐름 정립 |
이용호 |
|
| 동료 AI 기초 구조 |
ANSHelperCharacter, ANSHelperController |
BB + BT + Perception 세팅 |
| UI 매니저 기초 세팅 |
UI Manager, HUD, Augmentation UI |
UI 뼈대 구축 |
| 기본 HUD 작동 |
이영웅 |
|
| 레벨 기초 배치 |
L_HideOut, L_CanyonPlay |
거점 + Canyon 기본 구성 |
| 증강 시스템 기초 구조 |
UAugmentInstance, UAugmentDefinition |
Instance / Definition 구조 |
프로토타입 검증 목표
프로토타입 단계(1~2주)에서는 MICRO LOOP의 재미를 최우선으로 검증한다.
| 검증 항목 |
기준 |
| 이동 + 구르기 조작감 |
"회피가 쾌감 있는가?" |
| 원거리 사격 피드백 |
"맞히는 느낌이 있는가?" |
| 적 AI 반응 (ANSRushEnemy) |
"싸울 만한 상대인가?" |
4. Game Core
클래스 구조
ANSGameInstance
ANSOutGameMode ────────── ANSRunGameMode ────── StageManager
└── ANSOutGameState └── ANSRunGameState └── ANSPlayerState
ANSPlayerController
ANSOutGameMode (거점 GameMode)
- 거점(아웃 런) 전용 GameMode
ANSOutGameState로 거점 상태 관리
- NPC 구출 진행도 동기화: 각 클라이언트가 본인
ANSPlayerController의 진행도 기준으로 문 머티리얼을 로컬 변경 (초록 / 빨강)
게스트 거점 진입
→ 본인 로컬 SaveGame 로드
→ NPC 진행도를 서버(ANSPlayerController)에 동기화
→ 각 클라이언트에서 본인 ANSPlayerController의 진행도 기준으로
문 머티리얼 로컬 변경 (초록 / 빨강)
→ 세션 종료 시 각자 로컬에 개별 저장
| 조건 |
문 색상 |
상호작용 |
| 본인이 해당 NPC 구출 완료 |
🟢 초록 홀로그램 |
가능 |
| 본인이 해당 NPC 미구출 |
🔴 빨간 홀로그램 |
불가 |
ANSRunGameMode (런 GameMode)
- 런(인 런) 전용 GameMode
ANSRunGameState로 런 진행 상태 관리
- 큰 규칙(스테이지 진행, 클리어/전멸 판정)은 RunGameMode 자체에서 처리
- 스테이지 내 강화, 상호작용 처리는 StageManager를 별도로 두어 관리
ANSPlayerState로 플레이어별 런 내 상태 관리
ANSPlayerController
- 거점 / 런 양쪽에서 공통으로 사용
- NPC 구출 진행도 등 개인 데이터 보유 및 서버 동기화 담당
5. In Run Upgrade
클래스 구조
UAugmentationComponent
└── UAugmentInstance
└── UAugmentDefinition
UPartsEquipmentComponent
├── UPartsInventoryComponent
│ └── UPartItemInstance
└── UPartDefinition
UShopComponent
└── UShopDefinition
증강 시스템 (UAugmentationComponent)
① 레벨업/ 엘리트 or 보스 처치 → 증강 선택
- 4명이 각자 독립적으로 선택 (개인별 별도 UI)
UAugmentInstance: 런 중 보유한 증강 인스턴스
UAugmentDefinition: 증강 효과 정의 데이터
- DT기반 + 스킬트리 강화 수치에 의한 가변 확률 적용
| 등급 |
내용 |
예시 |
| 노말 |
기본 수치 소폭 강화 |
공격력 + x% |
| 고급 |
패널티/리턴 방식 강화 |
체력 - x%, 공격력 + y% |
| 희귀 |
조건 만족 스택형 강화 |
적 적중시 공격력 + x% (최대 n스택, 지속시간 m초) |
| 전설 |
캐릭터 스킬 매커니즘 변화 |
원거리 - 기본 공격 - x% 확률로 나선 미사일 발사 |
전설 등급 추가 예시
| 캐릭터 |
효과 예시 |
| Warrior (근접형) |
대쉬 후 공격이 범위 데미지로 변함 / 근접 처치 시 쿨타임 즉시 초기화 |
| Ranger (원거리형) |
투사체가 적을 관통 / 스킬 사용 시 분열 투사체 추가 발사 |
| Engineer (엔지니어) |
포탑 2개 동시 설치 가능 / 포탑 파괴 시 폭발 데미지 발생 |
② 보물상자 → 증강 선택 or 임시 재화 획득
| 항목 |
내용 |
| 결과 종류 |
강화 선택지 3개 or 임시 재화 획득 (랜덤) |
| 등급 구성 |
노말 / 고급 위주 (희귀 낮은 확률) |
| 역할 |
탐험 보상 성격 — 전투 없이 강화 / 골드 획득 가능 |
파츠 시스템 (UPartsEquipmentComponent)
UPartsInventoryComponent: 런 중 보유 파츠 인벤토리 관리
UPartItemInstance: 장착된 파츠 인스턴스
UPartDefinition: 파츠 효과 정의 데이터
UShopComponent / UShopDefinition: NPC 상점 구성 및 표시 데이터
파츠 장착 규칙
- 런 내 NPC 상점에서 골드로 구매, 랜덤 3개 표시 → 1개 선택 구매 / 리롤 가능 (골드 소모)
- 부위별 1개만 장착 가능
- 아웃 런 단계에서 파츠 1개 장착하고 출발 (파츠 기술자 NPC 해금 후)
- 등급 시각화: 머티리얼 변경 + 나이아가라 이펙트로 등급 표현
| 장착 부위 |
효과 예시 |
| 다리 파츠 |
2단 점프 / 대쉬 횟수 증가 |
| 손 파츠 |
치명타 확률 상한 증가 / 기본 멀티 히트 확률(더블 샷) |
| 몸통 파츠 |
최대 체력 1로 + 체력 1당 실드 x% / 최대 체력 x% 이하 시 n% 회복(쿨타임 m초) |
6. Character/Input
클래스 구조
NSBaseCharacter
├── DT_(캐릭터 타입) ← DataTable 기반 캐릭터 정보 주입
├── NS 기타 컴포넌트들
└── NSCombatComponent
[Input]
NSInputComponent (EnhancedInputComponent)
└── Player Controller ─────→ NSInputConfig
├── Native Input (이동, 구르기, 달리기 등)
└── Ability Input (스킬 태그 기반)
캐릭터 공통 설계 방침
- 모든 캐릭터는
NSBaseCharacter 단일 베이스에서 어빌리티만 다르게 적용하여 구현
- 캐릭터 정보는 DataAsset(
DA_BaseCharacter 등)에서 관리하고 캐릭터 에셋에 주입하는 방식
- 인풋: Lyra 프로젝트 방식 채용
Native Input: 이동, 달리기, 점프, 구르기 등 코드 직접 처리
Ability Input: 스킬은 태그 기반으로 NSInputConfig에서 관리
- 어빌리티를 추가할 때 코드 수정 없이
NSInputConfig에 태그를 추가하여 확장 가능
- 상하체 분리 + 모션 매칭 플러그인 사용으로 이동 중 사격 지원
- 원거리형의 경우 HitScan / Projectile 방식으로 공격 구현이 나뉠 수 있음
캐릭터 종류
Ranger (원거리형) ✅ 프로토타입 구현
| 구분 |
항목 |
내용 |
관련 GA |
| MVP |
좌클릭 (기본 공격) |
돌격소총 발사 |
UGA_RangerShoot |
| MVP |
우클릭 (직업 특성) |
나선 로켓 |
UGA_RangerRocket |
| MVP |
Q (액티브 스킬) |
수류탄 투척 |
UGA_RangerGrenade |
| 도전 |
E (액티브 스킬) |
연사 속도 및 재장전 속도 증가 버프 |
추후 추가 |
Engineer (엔지니어형) ✅ MVP 구현
| 구분 |
항목 |
내용 |
| MVP |
좌클릭 (기본 공격) |
못 샷건 발사 |
| MVP |
우클릭 (직업 특성) |
포탑 1점사 락온 |
| MVP |
Q (액티브 스킬) |
포탑 설치 |
| 도전 |
E (액티브 스킬) |
포탑 및 자신의 발사 속도 증가 |
Warrior (근접형) ⚠️ 확장 단계 구현
| 구분 |
항목 |
내용 |
| 도전 |
좌클릭 (기본 공격) |
x단 콤보 공격 |
| 도전 |
우클릭 (직업 특성) |
추후 기획 |
| 도전 |
Q (액티브 스킬) |
플리커 (쿨타임 + 2~3회 연속 돌진) |
| 도전 |
E (액티브 스킬) |
튕기는 방패 던지기 |
7. Companion/ AI
클래스 구조
ANSBaseAICharacter
└── ANSHelperCharacter
├── UpGradeComponent
├── Attribute set (UNSCompanionAttributeSet)
└── (미정 슬롯)
ANSBaseAIController
└── ANSHelperController
동료 AI (펫) 개요
- 런 시작 시 기본 펫 지급 (말만 가능한 상태)
- NPC 구출 후
UpGradeComponent를 통해 펫 기능 업그레이드
(몬스터헌터 아이루 스타일 목표)
- 싱글플레이 대응 협동 AI 역할
ANSHelperController가 ANSHelperCharacter를 제어
AI 구조 방침
ANSBaseAIController 기반 BB + BT + Perception 구조 사용
UpGradeComponent: 펫 업그레이드 기능 관리, GAS AttributeSet과 연동
- Perception: 시각 처리 우선, 추후 사운드 관련 재논의
8. Enemy/ AI
캐릭터 클래스 구조
ANSEnemyCharacterBase ──Has Reference──→ UNSEnemyDataAsset
│ Owns
├── UNSEnemyCombatComponent
├── UNSEnemyStateComponent
└── UNSEnemyTargetComponent
│ Inherit
├── ANSGroundEnemyBase ANSBossEnemyBase
│ │ Inherit │ Owns
│ ├── ANSRushEnemy ├── UNSBossPatternComponent
│ └── ANSShootEnemy ├── UNSBossPhaseComponent
│ └── UNSBossAggroComponent
└── ANSFlyingEnemyBase │ Inherit
│ Inherit ANSBossEnemy
├── ANSEliteRushEnemy
└── ANSSuicideEnemy
AI 컨트롤러 클래스 구조
ANSEnemyAIControllerBase
│ Owns
├── UBlackboardComponent
├── UBehaviorTreeComponent
└── UAIPerceptionComponent
│ Inherit
├── ANSGroundAIController
├── ANSFlyingAIController
└── ANSBossAIConroller
몬스터 구성
| 종류 |
클래스 |
구현 단계 |
비고 |
| 근거리 일반 |
ANSRushEnemy |
✅ 프로토타입 |
단순 추적 및 근접 공격 |
| 원거리 일반 |
ANSShootEnemy |
✅ MVP |
원거리 투사체 공격 |
| 엘리트 근거리 |
ANSEliteRushEnemy |
✅ MVP |
처치 시 증강 선택 트리거 |
| 자폭형 (비행) |
ANSSuicideEnemy |
확장 |
근접 자폭 |
| 보스 |
ANSBossEnemy |
✅ MVP (1마리) |
페이즈 설계 / 확장 시 최대 3마리 |
컴포넌트 역할
| 컴포넌트 |
역할 |
| UNSEnemyCombatComponent |
공격 가능 여부 / 추적 여부 관리 |
| UNSEnemyStateComponent |
AI 상태 구분 (대기 / 전투 / 사망) |
| UNSEnemyTargetComponent |
플레이어 인식을 단계별로 구분 |
| UNSBossPatternComponent |
보스 공격 패턴 관리 |
| UNSBossPhaseComponent |
보스 페이즈 전환 관리 |
| UNSBossAggroComponent |
보스 어그로 대상 관리 |
- UNSEnemyDataAsset: DataAsset 기반 Enemy 스탯 / 행동 데이터 외부 관리 |
|
| - Perception: 시각 처리 우선, 추후 사운드 관련 재논의 |
|
9. GAS
전체 클래스 구조
【Ability System Component】
UNSAbilitySystemComponent
【Attribute Set】
UNSBaseAttributeSet
├── UNSPlayerAttributeSet ──→ UNSPlayerState
├── UNSMonsterAttributeSet ──→ ANSEnemyCharacterBase
└── UNSCompanionAttributeSet
【Gameplay Ability】
UGA_SkillBase
├── UGA_RangerShoot
├── UGA_RangerRocket
├── UGA_RangerGrenade
└── UGA_Dodge
【Gameplay Effect】
GE_InstantDamage ──Uses──→ UGEC_DamageExecution
GE_SkillCooldown
GE_DodgeInvincible
【Gameplay Tag】
NSGameplayTags_Input
NSGameplayTags_Ability
NSGameplayTags_State
NSGameplayTags_Effect
NSGameplayTags_Cue
NSGameplayTags_Event
Ability System Component
UNSAbilitySystemComponent: 커스텀 ASC
- 인게임 증강 시스템에 의해 캐릭터 메커니즘이 바뀌는 것을 고려하여 커스텀 구현
- 캐릭터 기본 어빌리티 동적 교체를 위해 DA 어빌리티 설계, 파츠 장착 시 GA 변경 대응
Attribute Set
UNSBaseAttributeSet (공통 베이스)
공통 속성을 Base에 구현하고, 독립적인 요소만 하위 클래스에서 추가 부여
| Attribute |
타입 |
설명 |
| MaxHealth |
Float |
최대 체력 |
| CurrentHealth |
Float |
현재 체력 |
| AttackPower |
Float |
공격력 |
| Defense |
Float |
방어력 |
| MoveSpeed |
Float |
이동 속도 |
UNSPlayerAttributeSet (캐릭터 전용)
UNSBaseAttributeSet 상속 → UNSPlayerState에서 관리
| Attribute |
타입 |
설명 |
| ShieldRegenRate |
Float |
실드 초당 재생량 |
| ShieldRegenDelay |
Float |
실드 회복 시작 대기 시간 |
| MaxShield |
Float |
최대 실드 |
| CurrentShield |
Float |
현재 실드 |
| CriticalChance |
Float |
치명타 발생 확률 |
| CriticalDamage |
Float |
치명타 피해량 |
| ActionSpeed |
Float |
공격 속도 / 발사 속도 / 재장전 속도 |
UNSCompanionAttributeSet (동료 AI 전용)
UNSBaseAttributeSet 상속
| Attribute |
타입 |
설명 |
| ActionSpeed |
Float |
행동 속도 |
| UpgradeLevel |
Float |
펫 업그레이드 레벨 |
UNSMonsterAttributeSet (몬스터 전용)
UNSBaseAttributeSet 상속 → ANSEnemyCharacterBase에서 관리
| Attribute |
타입 |
설명 |
| DetectionRange |
Float |
탐지 범위 |
| AggroRange |
Float |
어그로 전환 범위 |
Gameplay Ability
| 클래스 |
대상 |
구현 단계 |
설명 |
| UGA_SkillBase |
공통 베이스 |
— |
모든 GA의 부모 클래스 |
| UGA_RangerShoot |
Ranger |
✅ 프로토타입 |
돌격소총 발사 |
| UGA_RangerRocket |
Ranger |
✅ 프로토타입 |
나선 로켓 |
| UGA_RangerGrenade |
Ranger |
✅ 프로토타입 |
수류탄 투척 |
| UGA_Dodge |
공통 |
✅ 프로토타입 |
구르기 / 대쉬 + 무적 프레임 |
Gameplay Effect
| 클래스 |
설명 |
| GE_InstantDamage |
즉시 데미지 적용. UGEC_DamageExecution을 통해 계산 |
| UGEC_DamageExecution |
데미지 계산 실행 클래스 (공격력, 방어력, 치명타 등 반영) |
| GE_SkillCooldown |
스킬 쿨타임 적용 |
| GE_DodgeInvincible |
구르기 중 무적 상태 적용 |
Gameplay Tag
| 태그 네임스페이스 |
용도 |
| NSGameplayTags_Input |
Native / Ability 입력 태그 구분 |
| NSGameplayTags_Ability |
어빌리티 식별 태그 |
| NSGameplayTags_State |
AI / 캐릭터 상태 태그 (대기, 전투, 사망 등) |
| NSGameplayTags_Effect |
GE 적용 식별 태그 |
| NSGameplayTags_Cue |
시각/사운드 연출 Cue 태그 |
| NSGameplayTags_Event |
어빌리티 간 이벤트 전달 태그 |
10. Data
클래스 구조
DataTable
├── DT_Parts ← 파츠 목록, 부위, 등급, 효과 수치
└── DT_Argument ← 증강 목록, 등급별 확률
DataAsset
├── DA_BaseCharacter
├── DA_RangerCharacter
├── DA_EngineerCharacter
└── DA_WarriorCharacter
UNSEnemyDataAsset ← Enemy 스탯 / 행동 데이터 (Enemy 클래스에서 Has Reference)
DataTable 구조
| DataTable |
내용 |
| DT_Parts |
파츠 목록, 부위, 등급, 효과 수치 |
| DT_Argument |
증강 목록, 등급별 확률, 효과 정의 |
DataAsset 구조
| DataAsset |
관리 데이터 |
비고 |
| DA_BaseCharacter |
공통 캐릭터 기본 스탯, 어빌리티 목록 |
베이스 정의 |
| DA_RangerCharacter |
Ranger 전용 스탯 / 스킬 참조 |
DA_BaseCharacter 기반 |
| DA_EngineerCharacter |
Engineer 전용 스탯 / 스킬 참조 |
DA_BaseCharacter 기반 |
| DA_WarriorCharacter |
Warrior 전용 스탯 / 스킬 참조 |
DA_BaseCharacter 기반 |
| UNSEnemyDataAsset |
몬스터 스탯, AI 행동 데이터 참조 |
Enemy 클래스에서 Has Reference |
11. UI
클래스 구조 (Common UI 방식)
UI Manager (UI 매니저)
├── HUD
│ ├── Goods (재화)
│ ├── HP/Shield (체력/실드)
│ ├── Crosshair (조준점)
│ └── Interaction (상호작용)
│
├── Main (메인)
│
├── InGame (인게임)
│ ├── Parts Inventory (파츠 인벤토리)
│ └── Augmentation (증강)
│ ├── Current Augment List (현재 증강 목록)
│ └── Random Choice Cards (랜덤 선택 카드)
│
└── Check (확인)
├── Title (타이틀)
└── Result (결과창)
UI Manager
- Common UI 방식으로 모든 UI 통합 관리
- HUD / Main / InGame / Check 4개 카테고리로 분류
HUD (실시간 요소)
| UI 요소 |
설명 |
| Goods (재화) |
현재 보유 임시 재화 실시간 표시 |
| HP/Shield (체력/실드) |
실시간 Attribute 반영 |
| Crosshair (조준점) |
실시간 업데이트, 상황에 따른 조준점 변화 |
| Interaction (상호작용) |
상호작용 가능 오브젝트 근접 시 표시 |
InGame UI
Parts Inventory (파츠 인벤토리)
- 부위별 슬롯 표시, 파츠 등급 머티리얼 시각화
- NPC 상점 연동 (랜덤 3개 표시 / 리롤 버튼)
Augmentation (증강 선택)
- 레벨업 / 엘리트 처치 / 보스 처치 / 보물상자 오픈 시 등장
- Current Augment List: 현재 보유 증강 목록을 선택 단계에서 함께 표시 (조합 판단력 향상)
- Random Choice Cards: 랜덤 증강 선택 카드 3장 표시
- 등급별 색상 구분 (노말 / 고급 / 희귀), 4인 각자 독립 UI
Check UI
| UI |
설명 |
| Title (타이틀) |
게임 시작 / 세션 참가 화면 |
| Result (결과창) |
런 클리어 / 전멸 결과 표시 |
12. Level Design
C++ 클래스 구조
SpawnerBase PropBase ──── AttributeSet(?)
├── EnemySpawner ├── ActivatableProp (폭발통 등 상호작용)
│ └── BossSpawner └── DestructibleProp (파괴시 재화 드랍)
└── ProbSpawner
| 클래스 |
역할 |
| SpawnerBase |
스포너 공통 베이스 |
| EnemySpawner |
일반 / 엘리트 Enemy 스폰 |
| BossSpawner |
보스 Enemy 스폰 |
| ProbSpawner |
Prop 오브젝트 스폰 |
| ActivatableProp |
활성화 가능한 Prop (폭발통 등) |
| DestructibleProp |
파괴 시 재화 드랍 (Chaos Destruction 적용) |
Editor 레벨 구조
L_Title L_HideOut(거점) L_Transition L_Test
L_CanyonPlay ◄── BP_CanyonGenerator (PCG)
│
├── L_CanyonSpawn (플레이어 스폰 구역)
├── L_CanyonBoss (보스전 구역)
├── L_CanyonShelter (쉘터 - 전투 없음, 구출/업그레이드)
├── L_CanyonAisle (스테이지 간 연결 통로)
│
├── L_Canyon1
├── L_Canyon2
├── L_Canyon3
└── L_Canyon4 (...)
레벨 설명
| 레벨 |
설명 |
| L_Title |
타이틀 / 세션 생성 및 참가 화면 |
| L_HideOut |
거점(아웃 런) 맵. 약 60m x 40m 대칭 구조, SF/실내 테마 |
| L_Transition |
Seamless Travel 대응 전환 레벨 |
| L_Test |
기능 테스트 전용 레벨 |
| L_CanyonPlay |
Canyon 스테이지 메인 레벨. BP_CanyonGenerator(PCG)로 룸 생성 |
| L_CanyonSpawn |
플레이어 스폰 구역 |
| L_CanyonBoss |
보스전 구역 |
| L_CanyonShelter |
전투 없는 쉘터 (구출 및 업그레이드 가능) |
| L_CanyonAisle |
스테이지 간 연결 통로 (동굴 형식, 다음 스테이지 미노출) |
| L_Canyon1~4(...) |
전투 룸 (PCG 기반 확장) |
거점 (L_HideOut)
- 맵 크기: 약 60m x 40m
- 구조: 대칭형 구조
- 테마: SF / 거점 / 실내
- 플레이어 수: 1~4명 (Co-op)
NPC 구출 → 거점 해금 구조
| 구출 NPC |
해금 콘텐츠 |
| 파츠 기술자 |
런 내 파츠 상점 활성화 |
| 전투 교관 |
캐릭터 스킬트리 해금 |
| 펫 NPC |
펫 기능 해금 |
| (추가 NPC) |
추후 기획 |
홀로그램 입구 시스템
| 상태 |
색상 |
상호작용 |
| 본인이 해당 NPC 구출 완료 |
🟢 녹색 홀로그램 |
가능 |
| 본인이 해당 NPC 미구출 |
🔴 빨간색 홀로그램 |
불가 |
13. 저장 시스템
클래스 구조
UNSLocalDataManager
└── UNSSaveGame
└── FNPCUnlockData ← NPC 구출 진행도
저장 방침
- 방식:
UNSSaveGame 기반 로컬 저장, UNSLocalDataManager가 세이브/로드 전체 관리
- 저장 시점: 런 종료 시 (클리어 or 전멸) + 거점 귀환 시
- 추후 레포지토리 패턴으로 변경 검토
- 비동기 로드: 거점 / 인게임 상황에 따라 필요한 데이터만 로드
| 저장 데이터 |
클래스 |
내용 |
| NPC 구출 진행도 |
FNPCUnlockData |
개인별 로컬 저장 |
| 공통 영구 스킬트리 강화 수치 |
UNSSaveGame |
개인별 로컬 저장 |
| 캐릭터 스킬트리 강화 수치 |
UNSSaveGame |
개인별 로컬 저장 |
| 스킬 조각 보유량 |
UNSSaveGame |
개인별 로컬 저장 |
| 해금된 캐릭터 목록 |
UNSSaveGame |
개인별 로컬 저장 |