BurningTimesAi/공유/소통/완료/2026-04-17_Phase0-C_QP2_정밀2...

165 lines
11 KiB
Markdown
Raw Normal View History

---
type: 응답서
from: 개발팀장
to: 총괄PM / 기획팀장
subject: Phase 0-C Q-P2 정밀 2차 응답 (터치 방어 메커닉 실측 확정)
date: 2026-04-17
status: 완료
related:
- 공유/소통/완료/2026-04-17_Phase0-C_QP_응답서_개발팀.md # 1차(초벌) 응답서
- 프로젝트/수상한잡화점/기획/Phase0_1_앵커전투시뮬레이션_v1.md
- 프로젝트/수상한잡화점/개발/08_전투시스템_SOT_v1.md
depends_on:
- PD 지시 #37 (Q-P2 정밀 2차 + Unity MCP 시뮬 인프라 4종)
---
# Phase 0-C — Q-P2 정밀 2차 응답 (터치 방어 메커닉 실측 확정)
## 0. 본 문서 범위
1차 응답서(`2026-04-17_Phase0-C_QP_응답서_개발팀.md`)에서 **"미확인 — 정밀 코드 리뷰 필요"**로 분류했던 Q-P2 4개 항목(감소 수치 실위치·고정/변동 여부·쿨다운 존재·지속형 여부)을 **Unity 프로젝트 코드 전수 실측**으로 확정한다. 읽은 파일은 `PCActor.cs`·`MobActor.cs`·`Actor.cs(base)`·`EffectMgr.cs`·`UITouchHandler.cs`·`IngameUIManager.cs`·`GlobalValue.json` (전부 Read only, C23 정직 보고).
---
## 1. Q-P2 3개 서브 질의 — 실측 기반 확정 답변
### 1-1. 서브 질의 1: "터치 1회 = 다음 공격 1회 피해 50% 감소?"
**확정 답변: ✗ 전제 오해 + 수치 불일치**
- **감소 비율 실측**: **30%** (기획팀 가정 "50%"와 불일치)
- **근거**: `Assets/ResWork/Table/Export/GlobalValue.json``{"s_ID": "PCDefence_Mul", "n_Value": "0.3", "exception": "PC 방어 시 피해% (0.3 = 30%)"}`
- **적용 지점**: `Assets/Script/InGame/Actor/Actor.cs:782-783``if (ActorStatus == eActorStatus.Defecne) reducedmg_rate += table_GlobalValue.Ins.Get_Float("PCDefence_Mul");`
- **추가 고정 감소**: `PCDefence = 1` (절대값 1 감소) — 소수점·저데미지 구간에서 효과, 고데미지 구간에서는 미미
**추가 정정**: "터치 1회 = **다음 공격 1회**" 도 부정확. 실제는 **터치 Down↔Up 구간 동안 지속**되는 상태 효과이며, 단일 공격에 바인딩되지 않는다. 1-2로 연결.
### 1-2. 서브 질의 2: "터치 유지 중 계속 감소?"
**확정 답변: ✓ 그렇다 (지속형 상태 효과)**
- **구조**: `UITouchHandler.cs` (`Assets/Script/UGUI/Util/UITouchHandler.cs`) — `IPointerDownHandler`·`IPointerUpHandler`·`IPointerExitHandler` 인터페이스로 구현
- **바인딩**: `IngameUIManager.cs:39``m_PCDefence.Set(m_PCActor.Play_Defence, m_PCActor.Release_Defence, null)`
- **동작 흐름**:
1. `OnPointerDown``isTouching = true` + `Play_Defence()` 호출 → `ActorStatus = eActorStatus.Defecne`
2. 터치 유지 동안 매 프레임 `Update()`에서 `m_onHold?.Invoke()` (현재 `null` 바인딩이라 no-op)
3. `OnPointerUp`·`OnPointerExit`·`OnDisable` → `isTouching = false` + `Release_Defence()``ActorStatus = eActorStatus.Idle`
- **지속 중 피격 처리**: `Actor.cs:515-519` — 데미지 계산 완료 후 `ActorStatus == Defecne``huddmg.Set_Block(dmg, ...)` + `PCBlock` 이펙트 재생. 매 피격마다 **PCDefence_Mul(30%) + PCDefence(1) 감소가 반복 적용**됨
- **상태 중 공격 차단**: `Actor.cs:4500``ActorStatus == Defecne` 시 공격 프레임 return. 즉 **방어 중 DPS 0**
- **상태 중 Hit 애니메이션 차단**: `PCActor.cs:133``ActorStatus == Defecne``Play_Hit` 조기 return
**결론**: 터치 유지 시간 동안 "무한 횟수 30% 감소 + 공격 불가"의 **공격↔방어 트레이드오프** 메커닉. 지속형이며 횟수 제한 없음.
### 1-3. 서브 질의 3: "쿨다운?"
**확정 답변: ✗ 없음 (즉시 재사용 가능)**
- **`UITouchHandler.cs` 전수 확인 결과**: 쿨다운 타이머·재사용 제한·다음 활성화 대기 로직 **일절 없음**
- **`PCActor.Play_Defence`·`Release_Defence`**: 상태 전환만 수행, 쿨 관련 코드 없음 (`PCActor.cs:148-162`)
- **`Actor.cs` 검색 결과**: `Cooltime`·`CoolDown`·`BlockCool`·`DefenceCool` 어떤 키워드로도 방어 쿨 관련 코드 미발견
- **실행 시나리오**: 유저가 터치 Up 즉시 다시 터치 Down 가능. 시스템상 1프레임 Up/Down 교차도 허용 (단 게임 경험상 연속 탭은 의미 없음 — 상태 유지가 더 유리)
**유의**: 이는 **2026-04-17 시점 Dev 브랜치**(커밋 `43b6074c4`) 기준. 향후 기획팀이 쿨다운 도입을 결정하면 `UITouchHandler` 래핑·별도 `DefenceCooldownMgr` 추가가 자연스러운 확장점.
---
## 2. 종합 — 터치 방어 메커닉 SOT (실측 확정판)
| 항목 | 값 | 근거 경로 |
|------|-----|----------|
| 감소 비율 (%) | **30%** | `GlobalValue.json.PCDefence_Mul = 0.3` |
| 고정 감소 (절대) | **1** | `GlobalValue.json.PCDefence = 1` |
| 적용 지점 | `Actor.cs:774-783` (절대+%) | 데미지 계산 pipeline |
| 활성 조건 | `ActorStatus == eActorStatus.Defecne` | PC 한정 (Mob은 `Play_Defence` override 없음) |
| 입력 메커닉 | 터치 Down→Up 지속 | `UITouchHandler.cs` (`IPointerDown/Up/ExitHandler`) |
| 쿨다운 | **없음** | 코드 전수 확인 결과 미존재 |
| 지속형/1회성 | **지속형** (터치 유지 = 방어 유지) | `isTouching` 상태 기반 |
| 방어 중 공격 | **불가** (차단됨) | `Actor.cs:4500`, `PCActor.cs:150` (Defecne 시 Set_Active/조기 return) |
| 방어 중 Hit 애니 | **재생 안함** (무적 아님, 데미지는 감소된 양으로 들어감) | `PCActor.cs:133` |
| 방어 중 회피(Evasion) | **차단** (Defecne 우선) | `PCActor.cs:143` |
| 적용 대상 범위 | Melee·Range 구분 없이 전 피격 | `Actor.cs:774` (`hitterAttacktype` 분기 없음, Defecne 보정은 공통) |
| 몬스터 방어 | **메커닉 부재** (MobActor에 `Play_Defence` override 없음) | `MobActor.cs` 전수 확인 |
| 이펙트 | `PCBlock` 이펙트 재생 + `huddmg.Set_Block` 호출 | `Actor.cs:517-518` |
| 오타 주의 | 원본 enum 표기 `Defecne`(Defence 오타) | 코드 전반 일관 오타, 수정 시 전역 영향 |
---
## 3. 기획팀 가정 vs 실측 불일치 리스트 (충돌 현황)
| 기획팀 가정 | 실측 결과 | 영향 |
|------------|-----------|------|
| 50% 피해 감소 | **30%** 감소 | 앵커 전투 생존 시뮬 결과가 기획팀 추정보다 낮게 나올 것 |
| 1회 공격 단위 | **지속형** 상태 효과 | "터치 1회 N회 방어" 계산식 전면 재검토 필요 |
| 쿨다운 존재 가능 | **없음** | 밸런싱 상한이 시스템이 아닌 **유저 조작 여유**에 의존 (동시 공격 불가 trade-off가 실질적 상한) |
| 터치=단순 감소 | 터치=**공격 불가 + 감소 + 이펙트** 3효과 묶음 | "공격 기회 손실 비용"을 반영한 밸런스 재계산 필요 |
본 불일치는 **Phase 0-C Q-P1(4마리 노드 초반 위험도 의도) 해석에도 직접 영향**. 30%+지속형+공격불가 조건이라면 "카드 0장 + 4마리" 시나리오에서 터치 방어 전략이 기획 의도 대비 얼마나 효과적인지를 시뮬레이션으로 재측정해야 함. Unity MCP 시뮬 인프라 4종(본 PD 지시 #37의 축 B)이 이 재측정의 직접 도구.
---
## 4. 개발팀 해석·권고
### 4-1. 용어 정리 권고 (기획팀 협의 대상)
- "터치 방어"·"블록"·"가드"·"Defence"·"Block"이 혼용 중 — `eActorStatus.Defecne` 오타 + `PCBlock` 이펙트 + `UITouchHandler.m_PCDefence` 바인딩이 각기 다른 용어 사용. 기획 SOT는 **"터치 방어(Touch Defence)"** 단일 표기 권장.
### 4-2. 수치 SOT 권고
- **GlobalValue.json이 단일 SOT**. 밸런스 변경 시 본 파일 수정으로 일원화. 카드·장비·인장에 의한 추가 감소는 **별개 스택**(`ReduceDmg`·`ReduceRangeDmg_Mul` 등)이며 방어 중에도 누산 적용됨 (`Actor.cs:773·781`).
### 4-3. Q-P1 재평가 안건
"의도된 설계 여부"는 **기획팀 영역**(1차 응답 유지). 단, 본 정밀 실측으로 "터치 방어 = 30% + 지속형 + 공격불가"가 확정된 이상, 기획팀은 본 메커닉 값을 전제로 의도를 재검토할 수 있음. Unity MCP 시뮬 인프라(§5)로 실측 생존률 측정 가능.
---
## 5. Unity MCP 시뮬 인프라 4종 (별도 산출물로 분리)
본 응답서와 동시 발신되는 4종 설계 문서:
1. `프로젝트/수상한잡화점/시뮬레이터/01_시뮬레이터_아키텍처_v1.md` — 독립성 보장 + 어셈블리 분리 설계
2. `프로젝트/수상한잡화점/시뮬레이터/02_시나리오_JSON_스키마_v1.md` — 입력 포맷
3. `프로젝트/수상한잡화점/시뮬레이터/03_결과_JSON_포맷_v1.md` — 출력 포맷
4. `프로젝트/수상한잡화점/시뮬레이터/04_MCP_호출_스니펫_v1.md` — 기획팀장용 복붙 템플릿 3종
실행 코드 스켈레톤 (독립 어셈블리, Editor-only):
feat(BT·신설): 조직 전환 Phase 2-A — Skill/Framework rename + 조직명 치환 + 새 프로젝트 셋업 PD님 2026-04-21 지시 8개 중 ②③④⑤⑥⑦⑧ 구조 전환부 이행 (①③ 노하우 재정리는 Phase 2-B, 삭제는 Phase 2-C). ## 집행 내역 1. .claude/skills/너드나비스-코어룰/ → BurningTimes-코어룰/ (Move-Item, R096·R100) 2. 코어코드/NerdNavis.Framework/ → 코어코드/BT.Framework/ (Move-Item, R100·R073·R081) 3. sed 일괄 치환 201파일 (치환 순서: NerdNavis.Framework → BT.Framework **선행** → NerdNavis → BurningTimes → 너드나비스 → BurningTimes) - 제외: .git/·.live/·.bak_*·memory/org/audit_logs/ 4. paths.local.json.template: DISCORD_WEBHOOK 추가 + Unity/Framework __SET_PER_PC__ placeholder 5. paths.local.json 실파일 생성 (gitignore, 본 PC 실값: Unity E:/NerdNavis/EerieVillage + Discord 웹훅) 6. 프로젝트/EerieVillage/ 신설 (개발·기획·관리 + README: 기묘한 고을: 조선퇴마뎐, Unity 6000.3.13f1 LTS, 2D PlatformerMicrogame) 7. README.md clone URL NerdNavis_AiDev/BurningTimesAi.git 실 URL 정정 8. 대화로그 공유/대화로그/조직운영/2026-04-21.md 신설 9. PD 지시 로그 양팀 BT1·BT2 항목 등록 (진행중) ## NerdNavis 의도적 잔존 3종 (C5 정직성) - GIT_REMOTE URL: Gitea 조직 hierarchy NerdNavis_AiDev (PD 별도 결정 영역) - UNITY_PROJECT_ROOT 실값: E:/NerdNavis/EerieVillage (PD 지시 6번) - EerieVillage README "BT.Framework (구 NerdNavis.Framework 계승)" 이력 표기 ## 감사 pm-auditor 사전 감사 Critical 2건 (대화로그·PD 지시 로그 선등록) 정정 완료. 매니페스트: bt-phase2a. ## 보류 (Phase 2-B → 2-C 예정) - Phase 2-B: 전 에이전트 동원 수상한잡화점 시행착오 노하우 추출·조직 자산화 - Phase 2-C: 수상한잡화점 일괄 삭제 + memory/org feedback "수상한잡화점" → "이전 프로젝트" 추상화 + PD 지시 로그 초기화 + 조직공지 정리 + SKILL P17·P29 재해석 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:44:48 +00:00
- `Assets/Sim/BurningTimes.Sim.asmdef`
- `Assets/Sim/Runtime/SimulationRunner.cs`
- `Assets/Sim/Runtime/ScenarioLoader.cs`
- `Assets/Sim/Runtime/ResultEmitter.cs`
- `Assets/Sim/Runtime/Models/ActorModel.cs`
**핵심 원칙**: 기존 `Assets/Script/` 일체 수정 없음. 메커닉은 독립 모델로 재구현(30% + 지속형 + 공격불가 규칙을 순수 C# 로직으로). 빌드 포함 안 됨(Editor-only define).
---
## 6. 기각안 (P24 기각안 필드 필수)
- **기각안 A: 실제 `Actor.cs` 경로를 재사용하여 시뮬 실행** — 1) 기존 코드 수정 위험 2) PlayMode 의존성 과도 3) PD님 "독립 시뮬" 제약 위반. 별도 Models/ 독립 재구현으로 우회
- **기각안 B: Q-P2 답변에 "50% 추정" 유지** — 실측 결과 30% 확정. C23 위반 회피. 기획팀 가정 정정 필요성 명시가 본 2차 응답의 존재 이유
- **기각안 C: 터치 방어에 쿨다운 있을 것이라 추정** — 코드 전수 확인 결과 미존재. 추정을 단정으로 포장하는 건 C23 위반. "시스템 상한 부재, 유저 조작 상한이 실질 상한"으로 정확히 기재
- **기각안 D: Mob도 방어 메커닉 있다고 가정** — `MobActor.cs` 전수 확인 결과 `Play_Defence` override 부재. 추정 금지, 실측 기록
---
## 7. 후속 작업
### 7-1. 개발팀 (본 응답서 발신과 동시 완료)
- [x] Q-P2 3서브 질의 실측 확정
- [x] 시뮬 인프라 4종 설계 문서
- [x] Sim 어셈블리·스켈레톤 코드 작성
- [x] PD 지시 로그 #37 진행중→완료 갱신
- [x] 수상한잡화점 대화로그 엔트리 (기각안 포함)
### 7-2. 기획팀 필요 액션
1. 터치 방어 수치 가정 정정 (50% → 30%, 1회 → 지속형, 쿨다운 없음)
2. Q-P1 재평가 (본 실측 기반 의도 재확인)
3. 시나리오 JSON 작성 (§5의 02 스키마 참조) → Unity MCP 실행 요청
4. 기획팀장이 Q-P2 정책 최종 결정 후 개발팀에 공유 (코드 변경 필요 시 별도 PR)
### 7-3. PM 조율 필요
- 본 PD 지시 #37 완료 아카이브 이동 + C20-1-A 자동 push
- 기획팀에 본 응답서 전달 (본 문서 완료 이동 시 자동 공유됨)
---
## 부록. 변경 이력
- **v1 (2026-04-17)**: 초판. 개발팀장. Unity 프로젝트 Dev 브랜치 `43b6074c4` 기준 실측.