192 lines
6.3 KiB
Markdown
192 lines
6.3 KiB
Markdown
|
|
---
|
|||
|
|
type: 설계문서
|
|||
|
|
project: 수상한잡화점
|
|||
|
|
subject: Unity MCP 호출 스니펫 — 기획팀장용 복붙 템플릿
|
|||
|
|
version: v1
|
|||
|
|
date: 2026-04-17
|
|||
|
|
status: 초판
|
|||
|
|
author: 개발팀장
|
|||
|
|
target_users: 기획팀장, /balance, /level 에이전트
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Unity MCP 호출 스니펫 v1
|
|||
|
|
|
|||
|
|
## 1. 사용 전제
|
|||
|
|
|
|||
|
|
1. **Unity Editor 기동 중** (`D:/NerdNavis/FilGoodBandits/DeckBuilding` 프로젝트 열림)
|
|||
|
|
2. **Unity MCP 연결 상태** (`mcp__unity-mcp__*` 도구 사용 가능)
|
|||
|
|
3. **독립 시뮬 어셈블리 컴파일 완료** (`Assets/Sim/NerdNavis.Sim.asmdef`)
|
|||
|
|
4. **시나리오 JSON 파일 준비** (스키마: `02_시나리오_JSON_스키마_v1.md`)
|
|||
|
|
|
|||
|
|
검증 방법:
|
|||
|
|
```
|
|||
|
|
mcp__unity-mcp__execute_code (code: "UnityEngine.Debug.Log(\"MCP OK\");")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2. 3종 템플릿
|
|||
|
|
|
|||
|
|
### 2-1. 단일 실행 스니펫
|
|||
|
|
|
|||
|
|
**용도**: 시나리오 1건 즉시 실행하여 결과 확인.
|
|||
|
|
|
|||
|
|
**복붙용 프롬프트** (기획팀장이 Claude/PM에게 전달):
|
|||
|
|
```
|
|||
|
|
Unity MCP로 아래 시나리오 1건 실행해주세요:
|
|||
|
|
- 시나리오 파일: {경로 예: D:/NerdNavis/FilGoodBandits/DeckBuilding/Assets/Sim/Scenarios/anchor_stage1.json}
|
|||
|
|
- 출력 모드: stdout
|
|||
|
|
- 결과 요지 요청: pc_survived, pc_remaining_hp_ratio, total_turns, defence_active_ratio
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**MCP 도구 호출** (실행자가 실제 수행):
|
|||
|
|
```csharp
|
|||
|
|
mcp__unity-mcp__execute_code
|
|||
|
|
code: """
|
|||
|
|
using NerdNavis.Sim;
|
|||
|
|
var runner = new SimulationRunner();
|
|||
|
|
var result = runner.Run("Assets/Sim/Scenarios/anchor_stage1.json");
|
|||
|
|
UnityEngine.Debug.Log(UnityEngine.JsonUtility.ToJson(result, true));
|
|||
|
|
"""
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**기대 결과**: Unity Console에 결과 JSON 출력 (§03 포맷 v1 준수). `read_console` 로 회수 가능.
|
|||
|
|
|
|||
|
|
### 2-2. 파라미터 스윕 스니펫
|
|||
|
|
|
|||
|
|
**용도**: 한 축 또는 여러 축 값들을 그리드 형태로 N회 반복 실행, 통계 집계.
|
|||
|
|
|
|||
|
|
**복붙용 프롬프트**:
|
|||
|
|
```
|
|||
|
|
Unity MCP로 파라미터 스윕을 실행해주세요:
|
|||
|
|
- 베이스 시나리오: {경로}
|
|||
|
|
- 스윕 축:
|
|||
|
|
- PCDefence_Mul: [0.2, 0.3, 0.4, 0.5]
|
|||
|
|
- monsters[0].attack_dmg: [3, 5, 7]
|
|||
|
|
- 모드: cartesian
|
|||
|
|
- 셀당 반복: 10회
|
|||
|
|
- 결과 집계 요지 요청: 각 셀의 pc_survived_ratio + pc_remaining_hp_mean
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**MCP 도구 호출**:
|
|||
|
|
```csharp
|
|||
|
|
mcp__unity-mcp__execute_code
|
|||
|
|
code: """
|
|||
|
|
using NerdNavis.Sim;
|
|||
|
|
var runner = new SimulationRunner();
|
|||
|
|
var sweep = runner.RunSweep("Assets/Sim/Scenarios/sweep_defence_mul.json");
|
|||
|
|
UnityEngine.Debug.Log(UnityEngine.JsonUtility.ToJson(sweep, true));
|
|||
|
|
"""
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**결과 해석 예시**:
|
|||
|
|
```
|
|||
|
|
cells[0] (Mul=0.2, dmg=3): survived=1.0, HP_mean=62.3
|
|||
|
|
cells[1] (Mul=0.2, dmg=5): survived=1.0, HP_mean=34.8
|
|||
|
|
cells[2] (Mul=0.2, dmg=7): survived=0.6, HP_mean=12.1
|
|||
|
|
... (총 4 × 3 = 12 cells)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2-3. 배치 비교 스니펫
|
|||
|
|
|
|||
|
|
**용도**: 서로 다른 시나리오·전략 N개를 한 번에 실행하여 결과 비교.
|
|||
|
|
|
|||
|
|
**복붙용 프롬프트**:
|
|||
|
|
```
|
|||
|
|
Unity MCP로 전략 비교 배치 실행 해주세요:
|
|||
|
|
- 배치 파일: {경로}
|
|||
|
|
- 포함 시나리오: strategy_never, strategy_always, strategy_touch_hold
|
|||
|
|
- 랭킹 기준: pc_remaining_hp_ratio
|
|||
|
|
- 결과 요지 요청: 전략별 ranking + deltas
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**MCP 도구 호출**:
|
|||
|
|
```csharp
|
|||
|
|
mcp__unity-mcp__execute_code
|
|||
|
|
code: """
|
|||
|
|
using NerdNavis.Sim;
|
|||
|
|
var runner = new SimulationRunner();
|
|||
|
|
var batch = runner.RunBatch("Assets/Sim/Scenarios/strategies_compare.json");
|
|||
|
|
UnityEngine.Debug.Log(UnityEngine.JsonUtility.ToJson(batch, true));
|
|||
|
|
"""
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 3. 파일 기반 결과 회수 (출력 모드 `file`)
|
|||
|
|
|
|||
|
|
시나리오 입력에 `"output_mode": "file"` 또는 호출 시 지정:
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
mcp__unity-mcp__execute_code
|
|||
|
|
code: """
|
|||
|
|
using NerdNavis.Sim;
|
|||
|
|
var runner = new SimulationRunner();
|
|||
|
|
var result = runner.Run("Assets/Sim/Scenarios/anchor_stage1.json");
|
|||
|
|
ResultEmitter.EmitFile(result, "Assets/Sim/Output/anchor_stage1_result.json");
|
|||
|
|
UnityEngine.Debug.Log("saved");
|
|||
|
|
"""
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
이후 Read 도구로 파일 내용 조회:
|
|||
|
|
```
|
|||
|
|
Read: D:/NerdNavis/FilGoodBandits/DeckBuilding/Assets/Sim/Output/anchor_stage1_result.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4. 프로젝트 외부 저장 (기획팀 `.cache/` 등)
|
|||
|
|
|
|||
|
|
시뮬 결과를 Unity 외부 기획 워크스페이스에 직접 저장:
|
|||
|
|
|
|||
|
|
```csharp
|
|||
|
|
mcp__unity-mcp__execute_code
|
|||
|
|
code: """
|
|||
|
|
using NerdNavis.Sim;
|
|||
|
|
var runner = new SimulationRunner();
|
|||
|
|
var result = runner.Run("Assets/Sim/Scenarios/anchor_stage1.json");
|
|||
|
|
ResultEmitter.EmitFile(result, @"D:/NerdNavis/NerdNavisAi/기획팀/.cache/sim_results/anchor_stage1.json");
|
|||
|
|
"""
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 5. 에러 진단 체크리스트
|
|||
|
|
|
|||
|
|
### 5-1. MCP 연결 실패
|
|||
|
|
- Unity Editor 상태 확인 (`manage_editor` 호출)
|
|||
|
|
- MCP 서버 재시작 (Claude Code 재연결)
|
|||
|
|
- Transport 모드 `stdio:6400` 확인 (교훈: 2026-04-14 Transport HTTP Local 불일치)
|
|||
|
|
|
|||
|
|
### 5-2. 컴파일 에러
|
|||
|
|
- `Assets/Sim/*.cs` 변경 후 `refresh_unity` 호출하여 재컴파일
|
|||
|
|
- Editor Console 스캔: `read_console`
|
|||
|
|
|
|||
|
|
### 5-3. 시나리오 파싱 실패
|
|||
|
|
- 스키마 버전 확인 (`schema_version: "1.0"`)
|
|||
|
|
- JSON 유효성 검사 (외부 툴 또는 `JsonUtility.FromJson` try/catch 확인)
|
|||
|
|
- `ScenarioValidationException` 메시지 참조
|
|||
|
|
|
|||
|
|
### 5-4. 결과가 이상 (비현실적 값)
|
|||
|
|
- `seed` 고정 여부 (`deterministic` 모드인지 확인)
|
|||
|
|
- `global_value` 기본값 오버라이드 확인
|
|||
|
|
- 상세 로그 활성화(`record_detail: true`)로 tick 추적
|
|||
|
|
|
|||
|
|
## 6. 실행 흐름 예시 (전체 파이프라인)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. 기획팀장: 시나리오 JSON 작성
|
|||
|
|
↓
|
|||
|
|
2. PM 또는 기획팀장: Claude Code에서 본 문서 §2-1 프롬프트 전달
|
|||
|
|
↓
|
|||
|
|
3. Claude: mcp__unity-mcp__execute_code 호출
|
|||
|
|
↓
|
|||
|
|
4. Unity Editor: SimulationRunner.Run() 실행
|
|||
|
|
↓
|
|||
|
|
5. Claude: read_console 로 결과 JSON 회수
|
|||
|
|
↓
|
|||
|
|
6. 기획팀장: 결과 JSON 분석·밸런스 튜닝
|
|||
|
|
↓
|
|||
|
|
7. (반복) 시나리오·스윕 조정하여 다시 §2
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 7. 변경 이력
|
|||
|
|
- **v1 (2026-04-17)**: 초판. MCP 연결 미확인 상태에서 작성 — 실제 실행 검증은 Unity Editor 기동 + MCP 연결 시점에 수행 (C23 정직).
|
|||
|
|
|
|||
|
|
## 8. 기각안
|
|||
|
|
- **기각안 A**: Unity Editor 외부에서 .NET 직접 실행 → Unity 테이블 의존성·Addressable 로드 등 환경 재현 비용 과도. Editor 내 실행이 최선
|
|||
|
|
- **기각안 B**: PlayMode 강제 전환 후 시뮬 → 시뮬 독립성 저해·프레임 락·기존 InGame 로직 간섭. EditMode + 독립 Runner가 깔끔
|
|||
|
|
- **기각안 C**: Headless 모드 배치 빌드 실행 → 빌드·CI 파이프라인 복잡. MCP `execute_code` 즉시 실행이 기획팀 피드백 루프 최적
|