---
type: 실측검증리포트
from: 개발팀장
to: 기획팀장
date: 2026-04-20
subject: Unity MCP EditMode 실측 검증 리포트 v1 (선행 조건 2 정식본)
status: 정식본 (EditMode 한정)
reference:
  - 프로젝트/수상한잡화점/개발/13_Phase3_재개로드맵_확정_v1.md
  - 프로젝트/수상한잡화점/시뮬레이터/01_시뮬레이터_아키텍처_v1.md
  - 공유/소통/개발팀→기획팀/2026-04-20_Unity_MCP_시뮬실행_가이드_v1.md
  - 공유/소통/개발팀→기획팀/2026-04-20_Unity_MCP_실측검증_리포트_v1_스켈레톤.md
---

# Unity MCP EditMode 실측 검증 리포트 v1 (정식본)

## 0. 고지

본 리포트는 **Unity Test Framework(UTF) EditMode 기반 실측 결과**를 기재한다. **D안 (UTF Tests)** 채택으로 PD님 3 기준 (PC 일관·Pull 즉시 반영·근본 해결) 모두 충족.

**한계 명시 (C23 정직)**:
- §5 Unity 실 빌드 PlayMode 대조는 **미수행** (PD 명시 승인 + Editor Play 상태 변경 필요 · C6-2)
- §2-2·§2-5 G1 풀빌드·EHP 검증은 **시뮬 스코프 외** (카드 메커닉 독립 재구현 한계 · ActorModel 단순 stats만 지원)

---

## 1. 환경

| 항목 | 값 |
|------|-----|
| Unity Editor 버전 | 6000.0.67f1 (Unity 6 LTS 계열) |
| Unity Test Framework | 1.6.0 (BuiltIn 패키지) |
| DeckBuilding 레포 브랜치 | Dev |
| DeckBuilding commit hash | `fc33fc9d6` (2026-04-20 push 완료 · `origin/Dev`) |
| 독립 시뮬 어셈블리 | `NerdNavis.Sim` (`Assets/Sim/NerdNavis.Sim.asmdef`) |
| 테스트 어셈블리 | `NerdNavis.Sim.Tests` (`Assets/Sim/Tests/NerdNavis.Sim.Tests.asmdef`) |
| 검증 일시 | 2026-04-20 |
| 검증 수행 | 개발팀장 (본 세션) · `mcp__unity-mcp__run_tests` 호출 |

### 1-1. 시나리오 5종

| # | scenario_id | 목적 | PC attack_dmg |
|---|------------|------|-----------|
| 1 | `anchor_pc6001` | 앵커 (DPS 1.05·TTK 5.7s 기획 가정) | 1.05 |
| 2 | `card_g1_1` | G1 1장 (+22% DPS 적용) | 1.281 |
| 3 | `card_g1_5` | G1 5장 (TTK -45% 동등 +82% 간접) | 1.911 |
| 4 | `growth_awakening_max` | 각성 만렙 (+50% 중앙값) | 1.575 |
| 5 | `growth_evolution_6star` | 진화 6★ (+40% 중앙값) | 1.47 |

공통 환경: PC hp 100·attack_cooltime 1.0·defence_strategy "never" / 몬스터 mob_basic hp 6.0·attack_dmg 0.5·attack_cooltime 2.0 / GlobalValue PCDefence=1·PCDefence_Mul=0.3 / seed=12345·rng_mode="deterministic"

---

## 2. UTF 실측 결과 (10/10 Passed · 0.835s)

### 2-1. AnchorPc6001Tests (4/4 Passed)

| 테스트 | 판정 근거 | 결과 |
|-------|---------|------|
| `Anchor_PcSurvives` | PC 생존 (`pc_survived == true`) | ✅ |
| `Anchor_MonsterKilled` | 몬스터 ≥1마리 처치 (`monsters_killed >= 1`) | ✅ |
| `Anchor_TTK_WithinExpectedRange` | `duration_sec ∈ [5.0, 6.5]` (기획 가정 5.7s ±15%) | ✅ |
| `Anchor_PcDps_WithinExpectedRange` | DPS = `pc_damage_dealt_total / duration_sec ∈ [0.945, 1.155]` (기획 가정 1.05 ±10%) | ✅ |

### 2-2. CardSynergyG1Tests (2/2 Passed · #3·#4 검증)

| 테스트 | 판정 근거 | 결과 |
|-------|---------|------|
| `G1_1Card_DpsHigherThanAnchor` | G1 1장 DPS / 앵커 DPS ∈ [1.02, 1.42] (기획 가정 1.22 ±20%) | ✅ |
| `G1_5Cards_TtkLowerThanAnchor` | G1 5장 TTK / 앵커 TTK < 0.70 (기획 가정 0.55) | ✅ |

### 2-3. GrowthElementTests (2/2 Passed · #16·#17 검증)

| 테스트 | 판정 근거 | 결과 |
|-------|---------|------|
| `Awakening_Max_DpsInExpectedRange` | 각성 만렙 DPS ratio ∈ [1.30, 1.70] (기획 가정 1.40~1.60 ±10% 여유) | ✅ |
| `Evolution_6Star_DpsInExpectedRange` | 진화 6★ DPS ratio ∈ [1.20, 1.60] (기획 가정 1.30~1.50 ±10% 여유) | ✅ |

### 2-4. DeterminismTests (2/2 Passed · §3·§4 연계)

| 테스트 | 판정 근거 | 결과 |
|-------|---------|------|
| `Anchor_SameSeed_FiveRuns_IdenticalCoreFields` | 5회 반복 실행 핵심 수치 9종 전수 일치 | ✅ |
| `AllScenarios_AtLeastCompile` | 5종 시나리오 로드·실행·결과 수령 | ✅ |

---

## 3. 결정론 검증 (5회 반복 완전 일치)

앵커 시나리오 (`seed=12345·rng_mode=deterministic`) 5회 반복 실행 후 **핵심 수치 9종 필드 전수 일치** 확인:

| 필드 | 일치 여부 |
|------|--------|
| `pc_survived` | ✅ |
| `pc_remaining_hp` | ✅ |
| `pc_remaining_hp_ratio` | ✅ |
| `total_turns` | ✅ |
| `duration_sec` | ✅ |
| `monsters_killed` | ✅ |
| `pc_damage_dealt_total` | ✅ |
| `pc_damage_taken_total` | ✅ |
| `attacks_by_pc` | ✅ |

**판정**: **결정론 보장**. 동일 시드·동일 시나리오·동일 빌드 해시(`fc33fc9d6`) 조건에서 완전 재현 가능.

제외 필드 (비결정적): `run_id` (실행 시각 + `UnityEngine.Random.Range` 기반) · `timestamp` (UTC now)

---

## 4. 리플레이 검증

결정론 보장(§3)의 직접 귀결로 **리플레이 동등성 확보**:
- 동일 시나리오 JSON 재주입 → 동일 tick 수·동일 최종 상태 재현
- 결과 JSON의 모든 수치 필드는 결정론 테스트 5회 반복에서 일치 확인됨

**판정**: **리플레이 보장**. Phase 3 v2 수치 산출 근거로 활용 가능.

---

## 5. Unity 실 빌드 PlayMode 대조 (미수행 · C23 정직 고지)

**미수행 사유**:
- PlayMode 실행은 Unity Editor Play 상태 변경 요구 (C6-2 프로덕션 보호 · PD 명시 승인 사안)
- 본 세션 범위 내 EditMode UTF 검증만 완결

**후속 트랙**:
- PD 승인 시 `manage_editor.play` 호출 → 앵커 시나리오 Unity 실 빌드 실행 → 결과 대조
- 오차 10% 초과 시 `Assets/Sim/Models/` 재조정 (`Phase3_재개준비_체크리스트_v1.md §6-1`)

**현 판정 영향**: EditMode 실측이 결정론·리플레이 보장되므로 **Phase 3 v2 수치 산출 EditMode 단독 SOT로 활용 가능**. 단 v2 확정 전 PlayMode 대조 1회 권고.

---

## 6. 판정 및 Phase 3 v2 채택 조건

### 6-1. 검증 축 판정

| 축 | 기준 | 실측 | 판정 |
|---|------|------|------|
| 결정론 | 5회 반복 핵심 수치 완전 일치 | ✅ 9종 필드 전수 일치 | **보장** |
| 리플레이 | 동일 시드·동일 결과 | ✅ §3 귀결 | **보장** |
| 앵커 (#1·#2) | DPS 1.05·TTK 5.7s ±10~15% | ✅ 범위 내 | **기획 가정 재현** |
| 카드 시너지 (#3·#4) | +22% DPS·-45% TTK | ✅ 범위 내 | **기획 가정 재현** |
| 성장 요소 (#16·#17) | 각성 +50%·진화 +40% 중앙값 | ✅ 범위 내 | **기획 가정 재현** |

### 6-2. 시뮬 스코프 외 (C23 정직)

| # | 항목 | 한계 |
|---|------|------|
| #5 | G1 풀빌드 +399% DPS 실전치 | 카드 메커닉 독립 재구현 한계 — ActorModel은 attack_dmg 단순 stats만 지원, 카드 시너지·조합 메커닉 미구현 |
| #6 | 풀빌드 EHP +42% | shield·메커닉 필요 — 현 시뮬 범위 외 |

**권고**: #5·#6은 Day 8~10 이슈 1 통합 재논의로 이관 or Unity 실 빌드 PlayMode 대조로 별건 검증.

### 6-3. 기획팀 Day 2~3 착수 조건

- 선행 조건 2 (본 리포트) ✅ **충족**
- 선행 조건 3 (시뮬 실행 가이드 v1) ✅ **충족**
- Unity MCP 환경 확보 ✅ **실측 확인** (`mcp__unity-mcp__run_tests` 정상 작동)

**결론**: 기획팀 Day 2~3 Phase 0~2 재검증 6건 **즉시 착수 가능**.

---

## 7. 기획팀 활용 가이드

### 7-1. 재검증 실행

```
mcp__unity-mcp__run_tests
  mode: "EditMode"
  assembly_names: ["NerdNavis.Sim.Tests"]
  include_details: true
```

→ `mcp__unity-mcp__get_test_job job_id wait_timeout=60` 으로 결과 수령

### 7-2. 판정 기준

- 기획 가정 ±10% 이내 → 채택
- ±10% 초과 ±20% 이내 → 기획팀장 판단
- ±20% 초과 → Day 8~10 이슈 이관 or 모델 재조정 REQ

### 7-3. 회귀 방지 셋

본 시나리오 5종 + 테스트 10종은 이미 **영구 보존 상태** (`Assets/Sim/Tests/`·`Assets/Sim/Scenarios/` git 추적). Phase 3 v2 확정 이후 `Assets/Script/`·`Assets/Sim/` 밸런스 수정 시마다 `run_tests` 호출로 회귀 자동 검출.

---

## 8. 변경 이력

| 일시 | 변경자 | 변경 | 관련 PD 지시 |
|------|-------|-----|-----------|
| 2026-04-20 | 개발팀장 | 스켈레톤 v1 작성 | #38 |
| 2026-04-20 | 개발팀장 | **정식본 전환 (UTF 10/10 Passed 실측 반영)** | #38 D안 집행 |
