# 게임 기획서: 3D 무작위 유닛 디펜스 (game_design.md)

## 1. 핵심 컨셉 (Core Concept)
- **장르:** 3D 실시간 전략 유닛 디펜스 (3D RTS-Style Unit Defense)
- **플레이 방식:** 고정된 타워를 짓는 것이 아니라, 골드를 소모해 무작위로 유닛을 뽑고, 생성된 유닛들을 플레이어가 직접 마우스로 드래그/선택하여 컨트롤하는 디펜스 게임입니다.
- **핵심 루프:** 
  1. 골드를 소모하여 버튼을 눌러 5가지 유닛 중 하나를 무작위로 소환한다.
  2. 소환된 유닛들을 컨트롤하여 가장자리를 무한히 도는 몬스터들을 공격한다.
  3. 몬스터를 처치해 골드를 획득하고, 더 많은 유닛을 확보한다.
  4. 라운드가 지날수록 강해지는 몬스터를 막아내며 총 20스테이지를 생존하면 승리한다.

---

## 2. 글로벌 플레이어 상태 및 패배 조건 (Global Player State & Defeat Condition)
이 데이터들은 전역 스크립트(`GameManager.gd`)에서 실시간으로 추적 및 관리됩니다.

| 변수명 (Variable Name) | 데이터 타입 | 초기값 | 설명 |
| :--- | :---: | :---: | :--- |
| `player_gold` | `int` | `300` | 유닛 소환 버튼을 누를 때 소모되는 재화. |
| `unit_spawn_cost` | `int` | `100` | 유닛 1마리를 무작위 소환하는 데 필요한 비용. |
| `current_stage` | `int` | `1` | 현재 진행 중인 스테이지 (1 ~ 20). |
| `active_monster_count` | `int` | `0` | 현재 필드에 존재하는 살아있는 몬스터의 총 개수. |

- **게임 패배 조건:** 필드에 생성된 몬스터의 수(`active_monster_count`)가 **200마리를 초과하는 즉시** 게임 패배 (`GAMEOVER`).
- **게임 승리 조건:** 20스테이지의 모든 몬스터를 처치하고 필드의 몬스터 수가 0이 되면 게임 승리 (`VICTORY`).

---

## 3. 환경 및 경로 시스템 (Environment & Path Loop)
- **무한 루프 경로:** 맵 지형의 가장자리를 크게 감싸는 사각형태의 `Path3D`가 배치됩니다.
- **몬스터 이동:** 몬스터들은 `PathFollow3D`를 따라 이동하며, 경로의 끝(Progress 비율 1.0)에 도달하면 사라지지 않고 **다시 시작 지점(Progress 비율 0.0)으로 리셋되어 무한하게 회전**합니다.

---

## 4. 스테이지 및 몬스터 성장 규칙 (Stage & Monster Scaling)
게임은 총 20단계의 스테이지로 구성되며, 몬스터의 체력은 선형적으로 증가합니다. 몬스터는 스테이지 시작 시 **1초 간격으로 계속해서 스폰**됩니다.

- **몬스터 체력 공식:** $HP = 100 + (Stage - 1) \times 50$
- **몬스터 스폰 간격:** 스테이지 진행 여부와 상관없이 매 1.0초마다 1마리씩 스폰.

### 스테이지별 몬스터 제원 예시
| 스테이지 (Stage) | 몬스터 체력 (HP) | 스폰 간격 (Interval) | 처치 보상 골드 (Gold) |
| :---: | :---: | :---: | :---: |
| **Stage 1** | `100` | `1.0초` | `15` |
| **Stage 2** | `150` | `1.0초` | `18` |
| **Stage 5** | `300` | `1.0초` | `25` |
| **Stage 10** | `550` | `1.0초` | `40` |
| **Stage 15** | `800` | `1.0초` | `60` |
| **Stage 20** | `1050` | `1.0초` | `100` |

---

## 5. 플레이어 유닛 레지스트리 (Player Unit Registry)
플레이어가 버튼을 누르면 아래 5가지 유닛 중 하나가 **20%의 동일한 확률(무작위)**로 생성됩니다. 스테이지별 몬스터 체력 증가량(100~1050)을 고려하여 공격력(Damage)을 다양하게 분배했습니다.

| 유닛 ID (Unit ID) | 소환 확률 | 공격력 (`float`) | 공격 속도 (Cooldown) | 이동 속도 (`float`) | 특징 (Trait) |
| :--- | :---: | :---: | :---: | :---: | :--- |
| `Unit_Striker` | `20%` | `12.0` | `0.5초` | `6.0` | 대미지는 낮지만 매우 빠른 연사형 근접 유닛 |
| `Unit_Guardian` | `20%` | `25.0` | `1.0초` | `4.0` | 가장 표준적이고 균형 잡힌 밸런스형 근접 유닛 |
| `Unit_Ranger` | `20%` | `18.0` | `0.8초` | `4.5` | 원거리에서 경로 위의 몬스터를 안전하게 타격 |
| `Unit_Slayer` | `20%` | `55.0` | `1.8초` | `3.5` | 공격 속도는 느리지만 한 방이 강력한 대형 유닛 |
| `Unit_Archmage` | `20%` | `110.0` | `3.0초` | `3.0` | 극단적으로 느린 쿨타임을 가진 고화력 마법 유닛 |

---

## 6. 조작 및 UI 시스템 (Controls & UI)
- **유닛 소환 버튼 (UI):** 화면 하단에 존재하며, 클릭 시 `player_gold`를 `unit_spawn_cost`만큼 차감하고 맵 중앙의 소환 구역에 5종의 유닛 중 하나를 무작위 인스턴스로 생성합니다.
- **RTS식 유닛 컨트롤:**
  - **선택:** 마우스 왼쪽 버튼 클릭으로 단일 유닛 선택, 또는 드래그(Box Selection)로 여러 유닛을 동시에 선택할 수 있습니다.
  - **이동:** 유닛을 선택한 상태에서 맵의 바닥을 마우스 오른쪽 버튼으로 클릭하면 해당 위치로 이동합니다.
  - **공격:** 유닛을 선택한 상태에서 무한 루프 경로를 돌고 있는 몬스터 근처로 가면, 해당 몬스터를 추격하며 공격 사거리 내에 들어올 시 자동으로 공격을 시작합니다.