Files
Northbound/PROTOTYPE_ROADMAP.md
T

17 KiB

Northbound 프로토타입 개발 로드맵

목적

이 문서는 현재 구현된 프로토타입을 다음 핵심 경험을 검증할 수 있는 10~15분 플레이 빌드로 전환하기 위한 개발 순서를 정의한다.

방어선을 이용해 북진할 시간을 만들고, 적 포탈을 파괴해 다음 웨이브를 약화하며, 그 자리에 아군 포탈을 재건해 작전 범위를 확장한다.

완성된 콘텐츠 양보다 아래 질문에 답하는 것을 우선한다.

  1. 방어선이 안정된 순간 플레이어가 자발적으로 북진하는가?
  2. 적 포탈 수와 이후 웨이브 난도의 관계를 이해하는가?
  3. 적 포탈 파괴가 즉각적인 성취와 미래의 이득으로 느껴지는가?
  4. 중간 아군 포탈이 파괴되었을 때 연결 단절이 의미 있는 위기가 되는가?
  5. 일반 공격과 특수 공격만으로 실시간 판단이 충분히 발생하는가?
  6. 타워가 전투를 대신하지 않고 플레이어가 북진할 시간을 벌어주는가?

현재 기반과 전환 대상

재사용할 기반

  • Unity Netcode 기반 플레이어·적·건물 동기화
  • 90초 GlobalTimer와 웨이브 시작 이벤트
  • 적 생성 예산과 5종의 기본 적 데이터
  • 체력, 피격, 파괴가 가능한 EnemyPortal
  • 좌클릭 일반 공격과 네트워크 피해 처리
  • TeamGate의 양방향 트리거, 팀 검사, 순간이동, 재진입 방지 코드
  • Core, 타워, 시야, 건설 기초 코드
  • 세로로 긴 맵과 안개 시스템

프로토타입에서 우선 비활성화할 기존 기능

삭제하지 않고 프로토타입 씬에서만 비활성화한다.

  • 일꾼 고용과 개별 일꾼 관리
  • 반복적인 수동 채취와 자원 운반
  • 자유로운 그리드 건설과 최대 50개 드래그 건설
  • 5단계 타워·벽 업그레이드
  • 무작위 자원 8~12개와 대량의 무작위 크립 캠프
  • 블랙스미스의 복잡한 업그레이드 목록

새 핵심 루프가 검증되기 전에는 기존 기능을 삭제하거나 대규모로 정리하지 않는다. 프로토타입 결과에 따라 재사용 여부를 결정한다.

목표 프로토타입 구성

남쪽

본진 + 아군 시작 포탈 P0
        │
첫 크리스탈 + 중간 포탈 P1
        │
두 번째 크리스탈 + 중간 포탈 P2
        │
세 번째 크리스탈 + 주 포탈 P3

북쪽
  • P0는 처음부터 아군 포탈이다.
  • P1과 P2는 적 포탈로 시작하며 파괴 후 아군 포탈로 재건할 수 있다.
  • P3는 최종 주 포탈이며 파괴하면 승리한다. 프로토타입에서는 아군 포탈로 재건하지 않는다.
  • 포탈은 고정된 인접 포탈하고만 연결된다.
  • P1이 파괴되면 P0와 P2는 직접 연결되지 않는다.
  • 포탈망이 끊겨도 모든 구간은 걸어서 이동할 수 있다.
  • P1, P2, P3의 활성 적 포탈 수가 포탈 공명 단계가 된다.

시스템 의존 순서

기준 씬 정리
→ 포탈 부지와 상태
→ 인접 포탈 이동
→ 활성 적 포탈 집계
→ 포탈 공명
→ 웨이브 구성 분리
→ 일반·특수 공격 정리
→ 크리스탈과 제한 건설
→ 세로 구간 배치
→ UI·연출
→ 멀티플레이 밸런스 검증

각 단계는 다음 단계에 필요한 최소 기능만 구현한다. 시각 연출과 범용화는 해당 시스템이 실제 플레이에서 유효하다고 확인된 뒤 진행한다.

단계 0. 기준선 고정과 프로토타입 씬 분리

목표

기존 기능을 보존하면서 새 루프를 안전하게 시험할 수 있는 기준선을 만든다.

작업

  • 현재 GameMain을 기준으로 별도의 프로토타입 씬을 준비한다.
  • 호스트와 클라이언트가 접속하고 플레이어·적·포탈이 정상 동기화되는지 확인한다.
  • 기존 90초 웨이브와 적 포탈 파괴가 정상 동작하는지 기록한다.
  • 프로토타입 씬에서 일꾼, 블랙스미스, 자유 건설 UI, 대량 맵 생성을 비활성화한다.
  • 테스트 로그에서 웨이브 번호, 적 포탈 수, 생성 적 수를 확인할 수 있게 한다.

완료 조건

  • Unity 컴파일 오류가 없다.
  • 호스트 1명과 클라이언트 1명이 같은 전투를 진행할 수 있다.
  • 기존 기능을 삭제하지 않고 단순한 테스트 공간이 실행된다.

단계 1. PortalSite 상태 모델

목표

적 포탈 오브젝트 자체가 사라지는 현재 구조를 고정된 포탈 부지가 상태를 관리하는 구조로 변경한다.

작업

  • 네트워크 동기화되는 PortalSite를 만든다.
  • 포탈 상태를 Enemy, Ruined, Allied로 제한한다.
  • 각 부지에 고정된 순서 인덱스와 북쪽·남쪽 이웃 참조를 둔다.
  • 기존 EnemyPortal의 체력, 적 생성, 피해 처리를 적 상태에서 재사용한다.
  • 적 포탈 체력이 0이 되면 부지까지 제거하지 않고 Ruined로 전환한다.
  • 폐허에서 공용 마나를 지불하고 아군 포탈을 건설할 수 있게 한다.
  • 아군 포탈이 파괴되면 점거 단계 없이 즉시 Ruined가 되게 한다.
  • P3 주 포탈 파괴 이벤트를 승리 조건에 연결할 수 있게 분리한다.

완료 조건

  • 서버에서 바뀐 포탈 상태가 모든 클라이언트에 동일하게 표시된다.
  • Enemy → Ruined → Allied → Ruined 전환이 가능하다.
  • 적 포탈을 파괴해도 부지와 연결 정보는 사라지지 않는다.
  • 포탈 상태 사이에 점거, 해킹, 불안정 같은 추가 상태가 없다.

단계 2. 방향 기반 인접 포탈 이동

목표

별도의 목적지 UI 없이 진입 방향으로 북쪽 또는 남쪽의 인접 아군 포탈로 이동한다.

작업

  • TeamGate의 트리거 판정과 순간이동 코드를 재사용한다.
  • 북쪽으로 포탈 중심을 통과하면 북쪽 이웃을 선택한다.
  • 남쪽으로 통과하면 남쪽 이웃을 선택한다.
  • 현재 포탈과 목적지 포탈이 모두 Allied일 때만 이동한다.
  • 중간 부지가 폐허이면 그 너머의 포탈로 건너뛰지 않는다.
  • 도착 후 짧은 재진입 방지만 적용한다.
  • 연결되지 않은 방향은 포탈의 화살표나 조명으로 확인할 수 있게 한다.

필수 테스트

P0 Allied - P1 Allied - P2 Allied
→ P0 ↔ P1 ↔ P2 이동 가능

P0 Allied - P1 Ruined - P2 Allied
→ P0와 P2 직접 이동 불가
→ 걸어서 P2까지 이동 가능

완료 조건

  • 호스트와 클라이언트 모두 같은 연결 규칙을 따른다.
  • P1 파괴와 재건에 따라 P0–P2 연결이 끊기고 복구된다.
  • 목적지 선택창이나 별도의 포탈 상호작용 버튼이 필요하지 않다.

단계 3. 포탈 공명

목표

활성 적 포탈 수가 해당 웨이브 적의 전투 스펙에 영향을 준다.

작업

  • 서버 권한의 포탈 레지스트리 또는 PortalNetworkManager를 만든다.
  • 현재 활성 적 포탈 수를 네트워크로 공유한다.
  • 웨이브 시작 시 적 포탈 수를 공명 단계로 기록한다.
  • 해당 웨이브에서 생성되는 적에게 공명 배율을 적용한다.
  • 공명은 최대 체력, 공격력, 제한적인 경직 저항에만 적용한다.
  • 이동 속도와 공격 속도는 변경하지 않는다.
  • 배율은 합연산이며 최대 단계를 제한한다.
  • 포탈 본체와 포탈 수비대에는 공명을 적용하지 않는다.
  • 프로토타입 수치는 코드 상수가 아니라 조정 가능한 데이터로 둔다.

초기 테스트 수치

활성 적 포탈 체력 공격력
0 +0% +0%
1 +10% +6%
2 +20% +12%
3 +30% +18%

이 수치는 확정 밸런스가 아니라 체감 검증을 위한 시작점이다.

완료 조건

  • 동일한 적이 공명 단계에 따라 예상한 체력과 공격력을 갖는다.
  • 웨이브 도중 포탈을 파괴해도 이미 생성된 적의 능력치는 갑자기 바뀌지 않는다.
  • 포탈 파괴 후 다음 웨이브에서 약화가 체감된다.
  • 공명 최대 상태에서도 포탈 수비대를 뚫고 상황을 회복할 수 있다.

단계 4. 웨이브 단계와 포탈 공명 분리

목표

웨이브 단계와 포탈 공명이 서로 다른 역할을 갖게 한다.

규칙

  • 웨이브 단계: 적 수, 적 종류, 구성, 출현 포탈을 결정한다.
  • 포탈 공명: 생성된 적의 체력과 공격력을 결정한다.
  • 적 포탈 파괴는 웨이브 단계를 되돌리지 않는다.
  • 별도의 적대 둥지나 북진해서 제거해야 하는 추가 시설은 만들지 않는다.

작업

  • 현재 포탈별 currentCost 증가를 전역 웨이브 예산으로 이동한다.
  • 웨이브별 예산과 적 구성 규칙을 데이터로 분리한다.
  • 기존 5종 적을 사용해 단계별 구성을 만든다.
  • 초기에는 일반·탱커·원거리·고속·정예 외의 적을 추가하지 않는다.
  • 파괴된 적 포탈에서는 더 이상 적이 생성되지 않게 한다.
  • 남은 적 포탈 사이에 웨이브 예산을 분배한다.
  • 모든 적 포탈이 파괴되었을 때의 종료 흐름을 명확히 한다.

완료 조건

  • 공명 단계가 같아도 웨이브가 진행되면 적 구성과 총압력이 증가한다.
  • 웨이브 단계가 같아도 적 포탈을 파괴하면 다음 웨이브 개체 스펙이 낮아진다.
  • 방어만 계속할 경우 웨이브 압력 때문에 장기적으로 한계가 발생한다.
  • 북진하면 상승한 웨이브 단계를 감당할 여지가 생긴다.

단계 5. 두 버튼 전투 정리

목표

좌클릭 일반 공격과 우클릭 특수 공격만으로 위치, 대상, 사용 시점 판단을 검증한다.

작업

  • Player 액션 맵에 SpecialAttack을 추가하고 우클릭에 연결한다.
  • 일반 공격의 원형 전체 판정을 전방 범위 판정으로 변경한다.
  • 마우스 위치를 기준으로 공격 방향을 결정한다.
  • 이동 방향과 공격 방향을 분리한다.
  • 일반 공격 중 이동 차단 시간을 최소화한다.
  • 특수 공격은 한 종류만 구현한다.
  • 특수 공격은 마나 또는 재사용 대기시간 중 한 자원만 사용한다.
  • 공격 판정과 자원 소비를 서버에서 검증한다.
  • 회피, 방어, 패리, 복잡한 콤보는 추가하지 않는다.

첫 전투안

  • 일반 공격: 짧은 전방 부채꼴 공격
  • 특수 공격: 마나를 소비하는 긴 직선 충격파

완료 조건

  • 일반 공격은 안정적인 지속 공격으로 사용된다.
  • 특수 공격은 정예, 밀집 적, 포탈 공격 중 사용 시점을 고민하게 한다.
  • 공격 입력보다 위치와 대상 선택이 생존에 더 큰 영향을 준다.
  • 네트워크 지연 상황에서도 중복 피해나 중복 자원 소비가 없다.

단계 6. 크리스탈과 최소 경제

목표

반복 채취와 일꾼 관리 없이 북진과 경제 성장을 연결한다.

작업

  • 본진 크리스탈에서 낮은 기본 마나를 자동 생산한다.
  • 맵에 고정된 외부 크리스탈 3개를 배치한다.
  • 주변 적을 제거하고 거점을 건설하면 자동 생산을 시작한다.
  • 마나는 팀 공용 자원으로 사용한다.
  • 외부 크리스탈은 포탈 재건과 기본 타워 건설에 필요한 성장을 제공한다.
  • 수동 채집, 개인 운반, 일꾼 배정을 프로토타입 씬에서 비활성화한다.
  • 마나 저장 한도는 바로 구현하지 않고 플레이테스트 후 결정한다.

완료 조건

  • 시작 직후 중요한 투자 하나를 선택할 수 있다.
  • 기본 수입만으로 최소 방어는 가능하다.
  • 빠른 포탈 재건과 추가 방어를 위해 외부 크리스탈 확보가 필요하다.
  • 기다리는 시간보다 북진과 거점 확보가 더 높은 성장 효율을 제공한다.

단계 7. 제한 방어 슬롯과 기본 타워

목표

타워가 웨이브를 대신 처리하지 않고 플레이어가 복귀할 시간을 번다.

작업

  • 자유 그리드 건설 대신 크리스탈 거점 주변에 고정 슬롯을 둔다.
  • 거점당 방어 슬롯은 1~2개로 제한한다.
  • 프로토타입에서는 기본 공격 타워 1종만 사용한다.
  • 기존 Arrow Tower Lv.1을 시작점으로 화력과 사거리를 재조정한다.
  • 타워의 목적을 처치보다 지연과 약한 적 정리로 맞춘다.
  • 벽 5단계, 타워 5단계, 드래그 건설은 비활성화한다.
  • 정찰 역할은 시야·경보 중심으로 최소 구현한다.

완료 조건

  • 타워만으로 전체 웨이브를 안정적으로 해결할 수 없다.
  • 타워가 없는 전선보다 플레이어의 복귀 시간이 유의미하게 늘어난다.
  • 슬롯 제한 때문에 모든 지역을 동시에 완벽하게 방어할 수 없다.

단계 8. 의미 있는 세로 구간 배치

목표

긴 맵이 빈 이동 공간이나 무작위 오브젝트 집합이 되지 않게 한다.

작업

  • 무작위 자원·크립 캠프 대량 생성을 제거하고 고정 구간으로 교체한다.
  • 본진, 첫 확장, P1, 위험 자원, P2, 포탈 전초, P3의 구분이 보이게 한다.
  • 각 구간의 전투와 이동 시간을 측정한다.
  • 전체 가로 영역이 화면에 들어오는 카메라 폭을 검증한다.
  • 플레이어를 화면 아래쪽에 두어 북쪽 시야를 더 많이 제공한다.
  • 확보한 크리스탈과 아군 포탈이 남북 연결망으로 보이게 한다.
  • 관측소, 대장간, 성소 같은 추가 기능 시설은 이 단계에서 추가하지 않는다.

완료 조건

  • 약 60~90초마다 전투, 확보, 재건, 이동 중 하나의 사건이 발생한다.
  • 각 포탈 구간이 시각적으로 구분된다.
  • 본진에서 주 포탈까지의 진행이 10~15분 테스트 런에 맞는다.
  • 북쪽으로 이동할수록 이전에 확보한 연결망이 성취의 기록으로 보인다.

단계 9. 정보 전달과 최소 연출

목표

전투 흐름을 방해하지 않으면서 포탈 상태와 공명을 이해할 수 있게 한다.

작업 순서

  1. 개발용 텍스트로 현재 웨이브, 적 포탈 수, 공명 단계를 표시한다.
  2. 포탈별 적·폐허·아군 상태와 연결 방향을 표시한다.
  3. 적 포탈과 강화된 적에 같은 공명 문양을 적용한다.
  4. 적 포탈 파괴 시 공명 단계 감소를 확인시킨다.
  5. 웨이브 시작 시 중앙 배너 대신 기존 공명 표시의 짧은 맥동을 시험한다.
  6. 포탈 공명음과 웨이브 시작 음향을 추가한다.

원칙

  • 공명 상태는 필요할 때 항상 확인할 수 있어야 한다.
  • 웨이브마다 중앙 화면을 가리는 알림은 필수로 사용하지 않는다.
  • 시각, 음향, UI 중 하나만으로 정보를 전달하지 않는다.
  • 연출의 강도와 형태는 플레이테스트 과정에서 조정한다.

완료 조건

  • 처음 플레이하는 사람이 적 포탈 수와 적 강화의 관계를 설명할 수 있다.
  • 포탈 연결이 끊어진 방향을 이동 시도 전에 알 수 있다.
  • 웨이브 시작 알림이 전투 시야나 조작을 방해하지 않는다.

단계 10. 완주·멀티플레이·밸런스 검증

목표

전체 루프를 1인, 2인, 4인 환경에서 반복 검증한다.

필수 테스트

  • 1인 호스트 완주
  • 호스트 + 클라이언트 1명 완주
  • 4인 연결과 역할 분담
  • 웨이브 중 적 포탈 파괴
  • 아군 중간 포탈 파괴와 재건
  • P1 단절 상태에서 P0와 P2 이동 차단
  • 플레이어가 북쪽에 고립된 상태에서 걸어서 귀환
  • 공명 3단계와 1단계의 동일 적 전투 비교
  • P3 파괴 시 승리
  • 코어 파괴 시 패배

기록할 지표

  • 첫 북진을 시작한 시간
  • 각 적 포탈의 파괴 시간
  • 아군 포탈 재건 여부와 시점
  • 플레이어가 본진과 전방에 머문 시간
  • 타워가 플레이어 없이 버틴 시간
  • 웨이브별 본진·거점 피해량
  • 일반 공격과 특수 공격 사용 비율
  • 실패 원인이 판단 부족인지 조작 난도인지

프로토타입 완료 조건

  • 플레이어가 방어만 반복하지 않고 자발적으로 북진한다.
  • 적 포탈을 파괴할수록 이후 웨이브가 약해졌다고 느낀다.
  • 포탈 재건이 이동과 후방 대응을 실제로 개선한다.
  • 중간 포탈 단절이 불편하지만 게임 진행을 막지는 않는다.
  • 전투가 두 버튼만으로 이해되면서도 대상·위치·특수 공격 판단이 발생한다.
  • 타워가 시간을 벌지만 플레이어 없이 승리하지는 못한다.
  • 한 판이 10~15분 안에 명확한 승리 또는 패배로 끝난다.

프로토타입 이후로 미룰 항목

  • 마나 저장 한도와 복잡한 경제 제약
  • 여러 영웅과 다수의 무기
  • 회피, 방어, 패리, 복잡한 콤보
  • 많은 타워와 다단계 업그레이드
  • 관측소, 대장간, 성소 등 추가 기능 시설
  • 적의 포탈 재점령과 재건
  • 점거, 해킹, 불안정 포탈 상태
  • 별도의 적대 둥지와 북진 전용 위협 시설
  • 정교한 포탈 공명 UI와 대규모 연출
  • 메타 성장과 장기 콘텐츠

구현 원칙

  • 네트워크 게임 상태는 서버가 결정하고 클라이언트는 표현한다.
  • 데이터 수치는 ScriptableObject 또는 조정 가능한 설정에 둔다.
  • 각 단계는 디버그 표현으로 먼저 검증한 뒤 시각 연출을 추가한다.
  • 새 시스템이 기존 시스템과 충돌하면 기존 기능을 즉시 삭제하지 말고 프로토타입 씬에서 비활성화한다.
  • 단계별 완료 조건을 통과하기 전에는 다음 콘텐츠를 늘리지 않는다.