Unity 6 기반 핵 앤 슬래시 액션 RPG. DOTS와 MonoBehaviour를 혼합하여 AI, 물리, 궤적 연산은 ECS에서, 게임 로직과 UI는 Mono에서 처리하는 하이브리드 아키텍처.
- 개발 형태: 팀 프로젝트 (프로그래머 3명)
- 기간: 2025.12 ~ 현재
- 담당: 전체 아키텍처 설계, 유닛 전체 설계 및 데이터 시스템 확립, Fragment/Frame 시스템 기획 및 설계, Behaviour Tree 설계 및 구현
동기
디아블로 시리즈의 팬으로, 핵 앤 슬래시 본연의 재미를 구현하면서 그 안에서 발생하는 기술적 문제들을 직접 설계하고 해결하는 완성도 높은 게임을 만들고 싶었다. 수백~수천 마리의 몬스터 AI를 매 프레임 평가하면서 GC 스파이크 없이 유지하는 것, 장비 옵션 하나가 스탯과 스킬 양쪽에 동시에 전파되는 것. 핵앤슬래시의 핵심 루프를 진지하게 구현하려 하면 이런 문제들이 반드시 따라온다.
3명이라는 소규모 팀으로 볼륨 있는 게임을 만들려면, 작업 단계부터 데이터 드리븐 방식이 필수였다. 스킬, 장비, AI, 드롭 테이블 등 복잡한 계층 구조를 코드가 아닌 ScriptableObject와 설정 데이터 중심으로 관리하여, 기획 변경이나 밸런싱을 코드 수정 없이 처리할 수 있는 구조를 지향했다.
MonoBehaviour만으로는 구조적 한계가 있었고, DOTS의 데이터 지향 처리가 필요한 영역이었다. 다만 Unity DOTS는 UI, 애니메이션, 물리 상호작용 등 Mono 생태계에 의존하는 영역이 여전히 많다. 연산 집약적인 AI/궤적/물리만 DOTS로, 나머지는 Mono로 유지하되 양측을 안정적으로 동기화하는 하이브리드 구조가 필요했다.
접근
프로젝트를 5개 레이어로 분리했다.
flowchart TD
subgraph L1["Presentation"]
P["UI, HUD, Tooltip, Localization"]
end
subgraph L2["Game Logic"]
GL["Units, Fragments, Frame, Map, Objects"]
end
subgraph L3["Runtime Systems"]
RS["SystemManager, Bridge, Pool, Resource, Data"]
end
subgraph L4["DOTS Layer"]
DL["AI Evaluation, Trajectory, Physics, EntityLink"]
end
subgraph L5["Data Layer"]
DC["BaseData, Config, RangedTypes, Serialization"]
end
L1 --> L2 --> L3 --> L4 --> L5전체 아키텍처와 핵심 시스템은 직접 설계했고, 팀원 3명이 도메인별로 구현을 분담했다. 내가 담당한 핵심 설계 판단은 세 가지였다.
첫째, BridgeSystem으로 DOTS-Mono 경계를 격리. ECS Entity와 MonoBehaviour Unit 사이의 데이터 동기화를 3-phase(Read/Process/Write) 패턴으로 통일했다. AI 커맨드 디스패치, Transform 동기화, 투사체 궤적 반영 모두 이 패턴을 따른다.
둘째, Signal 조합으로 스킬을 구성. Origin(발동), Modulation(변형), Final(효과) 세 단계의 Signal을 Frame(장비)의 슬롯에 배치하는 것만으로 스킬이 조합된다. Shoot + Fan + Homing + Explosion 같은 조합이 코드 변경 없이 데이터만으로 가능하다.
셋째, Behaviour Tree를 DOTS 네이티브로 구현. 재귀 호출 대신 FixedList128Bytes 기반 명시적 스택으로 BT를 순회하여, GC 할당 없이 Burst 컴파일이 가능한 구조를 만들었다.
핵심 구현
| 영역 | 내용 |
|---|---|
| 하이브리드 아키텍처 | BridgeSystem 3-phase 동기화, EntityLink Mono-DOTS 연결, BatchProcessor 캐싱 |
| 스킬 파이프라인 | Signal 3단계 조합(Origin/Modulation/Final), ExecutionContext 딥클론, Signal 풀링 |
| 행동 트리 | Zero-allocation 스택 기반 BT 평가, Burst 컴파일, Blackboard DOTS 동기화 |
| 유닛 시스템 | Unit 추상 클래스 + 모듈 합성(Stat/Animation/Movement/Model), Pool 라이프사이클 |
| 장비 시스템 | Frame/SignalSlot 구조, Affix 이중 전파(Stat + Signal), 세트 보너스, 품질 캐스케이드 |
| 데이터 시스템 | BaseData/Config 추상화, StatModifier/SignalModifier 일반화, enum 기반 정합성 |
기술 스택
| 기술 | 적용 영역 |
|---|---|
| C# / Unity 6 | 12개 도메인, ~280 스크립트, 런타임 시스템 |
| Unity DOTS (ECS) | AI 평가, 궤적 연산, 물리 충돌, Transform 동기화 |
| Burst Compiler | BT 평가 Job, 궤적 시스템 |
| UniTask | 2-phase 비동기 초기화, 씬 전환, 리소스 로딩 |
| Addressables | 에셋 라벨 기반 일괄 로딩, ref-counting |
문서 구성
| 문서 | 내용 |
|---|---|
| 01-전체-아키텍처-설계 | 5-Layer 구조, 도메인 분리, SystemManager 부트스트랩 |
| 02-데이터-드리븐-설계 | 데이터 추상화/일반화, StatModifier/SignalModifier, 정합성 보장 |
| 03-런타임-인프라 | ResourceSystem ref-counting, Spawnable 풀링, LoadingSystem 씬 전환 |
| 04-DOTS-하이브리드-아키텍처 | BridgeSystem 3-phase 동기화, EntityLink 양방향 참조 |
| 05-시그널-프래그먼트-파이프라인 | Signal 조합 구조, ExecutionContext 복제, Modulation 시점 분리 |
| 06-행동-트리-시스템 | Zero-allocation BT 평가기, Burst 컴파일, AIBridge 커맨드 디스패치 |
| 07-유닛-시스템-설계 | Unit 추상 클래스 + 모듈 합성, StatModule 재계산 파이프라인, Monster/Player 확장 |
| 08-장비-프레임-시스템 | Frame/SignalSlot 구조, Affix 이중 전파, Tier/Quality 롤링 파이프라인, 세트 보너스 |