Unity 6.5 업그레이드와 신규 프로토타입 기반 구축

This commit is contained in:
2026-08-31 20:31:37 +09:00
parent 7fc457a384
commit 2f6e80fd57
233 changed files with 15070 additions and 6481 deletions
+414
View File
@@ -0,0 +1,414 @@
# Northbound 프로토타입 개발 로드맵
## 목적
이 문서는 현재 구현된 프로토타입을 다음 핵심 경험을 검증할 수 있는 10~15분 플레이 빌드로 전환하기 위한 개발 순서를 정의한다.
> 방어선을 이용해 북진할 시간을 만들고, 적 포탈을 파괴해 다음 웨이브를 약화하며, 그 자리에 아군 포탈을 재건해 작전 범위를 확장한다.
완성된 콘텐츠 양보다 아래 질문에 답하는 것을 우선한다.
1. 방어선이 안정된 순간 플레이어가 자발적으로 북진하는가?
2. 적 포탈 수와 이후 웨이브 난도의 관계를 이해하는가?
3. 적 포탈 파괴가 즉각적인 성취와 미래의 이득으로 느껴지는가?
4. 중간 아군 포탈이 파괴되었을 때 연결 단절이 의미 있는 위기가 되는가?
5. 일반 공격과 특수 공격만으로 실시간 판단이 충분히 발생하는가?
6. 타워가 전투를 대신하지 않고 플레이어가 북진할 시간을 벌어주는가?
## 현재 기반과 전환 대상
### 재사용할 기반
- Unity Netcode 기반 플레이어·적·건물 동기화
- 90초 `GlobalTimer`와 웨이브 시작 이벤트
- 적 생성 예산과 5종의 기본 적 데이터
- 체력, 피격, 파괴가 가능한 `EnemyPortal`
- 좌클릭 일반 공격과 네트워크 피해 처리
- `TeamGate`의 양방향 트리거, 팀 검사, 순간이동, 재진입 방지 코드
- `Core`, 타워, 시야, 건설 기초 코드
- 세로로 긴 맵과 안개 시스템
### 프로토타입에서 우선 비활성화할 기존 기능
삭제하지 않고 프로토타입 씬에서만 비활성화한다.
- 일꾼 고용과 개별 일꾼 관리
- 반복적인 수동 채취와 자원 운반
- 자유로운 그리드 건설과 최대 50개 드래그 건설
- 5단계 타워·벽 업그레이드
- 무작위 자원 8~12개와 대량의 무작위 크립 캠프
- 블랙스미스의 복잡한 업그레이드 목록
새 핵심 루프가 검증되기 전에는 기존 기능을 삭제하거나 대규모로 정리하지 않는다. 프로토타입 결과에 따라 재사용 여부를 결정한다.
## 목표 프로토타입 구성
```text
남쪽
본진 + 아군 시작 포탈 P0
│
첫 크리스탈 + 중간 포탈 P1
│
두 번째 크리스탈 + 중간 포탈 P2
│
세 번째 크리스탈 + 주 포탈 P3
북쪽
```
- P0는 처음부터 아군 포탈이다.
- P1과 P2는 적 포탈로 시작하며 파괴 후 아군 포탈로 재건할 수 있다.
- P3는 최종 주 포탈이며 파괴하면 승리한다. 프로토타입에서는 아군 포탈로 재건하지 않는다.
- 포탈은 고정된 인접 포탈하고만 연결된다.
- P1이 파괴되면 P0와 P2는 직접 연결되지 않는다.
- 포탈망이 끊겨도 모든 구간은 걸어서 이동할 수 있다.
- P1, P2, P3의 활성 적 포탈 수가 포탈 공명 단계가 된다.
## 시스템 의존 순서
```text
기준 씬 정리
→ 포탈 부지와 상태
→ 인접 포탈 이동
→ 활성 적 포탈 집계
→ 포탈 공명
→ 웨이브 구성 분리
→ 일반·특수 공격 정리
→ 크리스탈과 제한 건설
→ 세로 구간 배치
→ 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`일 때만 이동한다.
- 중간 부지가 폐허이면 그 너머의 포탈로 건너뛰지 않는다.
- 도착 후 짧은 재진입 방지만 적용한다.
- 연결되지 않은 방향은 포탈의 화살표나 조명으로 확인할 수 있게 한다.
### 필수 테스트
```text
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 또는 조정 가능한 설정에 둔다.
- 각 단계는 디버그 표현으로 먼저 검증한 뒤 시각 연출을 추가한다.
- 새 시스템이 기존 시스템과 충돌하면 기존 기능을 즉시 삭제하지 말고 프로토타입 씬에서 비활성화한다.
- 단계별 완료 조건을 통과하기 전에는 다음 콘텐츠를 늘리지 않는다.