GAS 기반 탑다운 액션 RPG — 언리얼 엔진 5로 구현된 멀티플레이 지원 RPG Game
📹 Youtube: Link
Terroria는 언리얼 엔진 5의 Gameplay Ability System(GAS) 을 핵심 골격으로 삼아 설계된 탑다운 액션 RPG입니다.
클릭-투-무브 방식의 조작, 퀘스트·대화·상점 시스템, 행동 트리 기반 AI, 멀티플레이 복제(Replication) 아키텍처까지 — RPG 장르를 구성하는 주요 시스템을 모두 C++로 직접 구현하였습니다. 또한 블루프린트 확장성을 염두에 두고 설계되어, 디자이너와 프로그래머 모두가 유연하게 콘텐츠를 추가할 수 있습니다.
Notice: 소스코드만 업로드 되어있습니다. 리소스 파일은 제공하지 않습니다.
UTGameplayAbility기반 커스텀 어빌리티 클래스와 동적 쿨다운 관리 (MMC_CooldownReduction)ExecutionCalc_Damage— 물리/마법 데미지 타입, 치명타, 방어 감소 공식이 적용된 커스텀 데미지 실행 계산- 어빌리티 입력 버퍼(
GameplayInputQueueSystem) — 공격 중 다음 스킬 입력을 큐에 저장했다가 타이밍에 맞춰 자동 실행 AbilityTask_TargetDataUnderMouse— 마우스 커서 기반 타겟 데이터를 서버에 안전하게 복제
- 감지 → 추격 → 공격 → 귀환 상태를 GameplayTag로 관리하는 상태 머신
- 커스텀 BT 서비스/태스크/데코레이터 (
BTService_UpdateCombatContext,BTTask_SetStateTag,TDecorator_HasGameplayTag) - Leash 시스템 — 지정 반경 이탈 시 자동으로 홈으로 귀환, Wander/Search 등 자연스러운 순찰 행동
- 노드 기반 분기 대화 (
DialogueManagerSubsystem) - 조건부 대화 — 퀘스트 상태, GameplayTag, 대화 이력 등 다양한 조건을 복합 평가
- 대화 이벤트 — 대화 중 퀘스트 수락, 아이템 지급, 목표 완료 등을 직접 트리거
QuestManagerSubsystem(GameInstance 서브시스템) — 게임 전반의 퀘스트 상태를 단일 진실 공급원으로 관리- 선행 퀘스트(Chain Quest), 시간 제한, NPC 보고 방식 등 다양한 퀘스트 유형 지원
QuestGiverComponent/QuestReceiverComponent— NPC와 플레이어를 느슨하게 결합하는 컴포넌트 분리 구조- GameplayTag 기반 일괄 목표 업데이트 (
UpdateObjectiveByTag)
DataTable기반 아이템 정의 —FShopItemTableRow로 에디터에서 비용 곡선(ScalableFloat)을 직접 설정- 스킬 업그레이드 / 어트리뷰트 강화 두 가지 카테고리 지원
TShopComponent+TShopWidgetController— MVC 패턴으로 UI와 로직을 분리
- 플레이어 스탯(
Level,XP,Gold,AttributePoint) 서버 권한 복제 - 어빌리티 시스템 복제 모드 분리 — 플레이어는
Mixed, NPC/Enemy는Minimal - 레벨업 파티클, 플래시 스킬 이펙트 등
NetMulticast처리
NavigationSystem기반 경로 탐색 +SplineComponent스무딩- 커서 하이라이트 인터페이스 (
IHighlight) — 적, 아이템, NPC 커서 타입 자동 전환 - 짧은 클릭은 이동, 긴 클릭(Hold)은 연속 추적으로 자동 분기
| 분류 | 내용 |
|---|---|
| 엔진 | Unreal Engine 5.6 |
| 언어 | C++ 17 |
| 핵심 플러그인 | Gameplay Ability System (GAS), Enhanced Input, AI Module, Niagara |
| 내비게이션 | NavigationSystem V1 (NavMesh) |
| UI 프레임워크 | UMG + 커스텀 WidgetController (MVC 패턴) |
| 데이터 관리 | DataAsset, DataTable, ScalableFloat Curve |
| 네트워크 | 언리얼 엔진 내장 복제 시스템 (Listen Server 기반) |
Source/Terroria/
├── AbilitySystem/ # GAS 핵심 — 어빌리티, 어트리뷰트, 이펙트 계산
│ ├── Abilities/ # BlackHole, Shield, ShockWave 등 개별 스킬
│ ├── AsyncTask/ # WaitCooldownChange 등 비동기 태스크
│ ├── Component/ # GameplayInputQueueSystem (입력 버퍼)
│ ├── Data/ # DataAsset — 캐릭터 클래스, 레벨업, 어빌리티 정의
│ ├── ExecCalc/ # ExecutionCalc_Damage (데미지 계산)
│ └── MMC/ # MaxHealth, MaxMana, CooldownReduction MMC
├── AI/ # 행동 트리 서비스/태스크/데코레이터
│ ├── Decorator/
│ ├── Service/
│ └── Task/
├── Character/ # 플레이어 / 적 / NPC 캐릭터 클래스
├── DialogueSystem/ # 대화 서브시스템 및 컴포넌트
├── Game/ # GameMode, SoundManagerSubsystem
├── Input/ # Enhanced Input 매핑 및 입력 컴포넌트
├── Player/ # PlayerController, PlayerState, ShopComponent
├── QuestSystem/ # 퀘스트 서브시스템, 컴포넌트, 데이터 타입
└── UI/ # HUD, WidgetController (Overlay, Shop, AttributeMenu)
[TPlayerController]
│── Enhanced Input ──► AbilityInputTag ──► UTAbilitySystemComponent
│── Click-to-Move ──► NavigationSystem ──► SplineComponent
└── Interaction(F) ──► IInteractable::Execute_Interact()
[GAS Flow]
Input ──► HeldAbilityInputTag() ──► TryActivateAbility()
└► InputQueueSystem ──► (버퍼) ──► TryActivateBufferedAbility()
[Quest Flow]
NPC(QuestGiverComponent) ──► OfferQuest()
└──► QuestManagerSubsystem::AcceptQuest()
└──► OnQuestStatusChanged (Delegate)
└──► QuestReceiverComponent ──► UI
[Damage Flow]
Ability ──► GameplayEffect ──► ExecutionCalc_Damage
└──► IncomingDamage (MetaAttribute)
└──► PostGameplayEffectExecute()
└──► Die() / XP Event
- 보스 페이즈 시스템 — HP 임계값마다 행동 패턴과 BGM이 전환되는 다단계 보스 전투
- 상태이상 시스템 확장 — 기절·빙결·출혈 등 GE 스택 기반 디버프 추가
- 동적 난이도 조절 — 플레이어 레벨·사망 횟수에 따라 AI 스탯과 어그로 범위를 자동 조정
- 전용 서버(Dedicated Server) 지원 — 현재 Listen Server 구조에서 DS 빌드로 전환
- 세션 시스템 — Online Subsystem을 활용한 방 생성·참여·로비 UI
- 월드 맵 & 지역 이동 — 지역별 씬 스트리밍 및 미니맵 UI
- 다이얼로그 에디터 유틸리티 — 퀘스트·대화 데이터를 에디터 내에서 시각적으로 편집하는 커스텀 툴
- 성능 프로파일링 — Insights 기반 네트워크 복제 비용 측정 및 최적화
Copyright 2025 @xerlock. All Rights Reserved.
본 프로젝트의 소스 코드 및 에셋은 저작권법의 보호를 받습니다. 허가 없는 복제, 배포, 수정을 금합니다.
Built with using Unreal Engine 5 & GAS
