11 KiB
| type | from | to | subject | date | status | related | depends_on | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 응답서 | 개발팀장 | 총괄PM / 기획팀장 | Phase 0-C Q-P2 정밀 2차 응답 (터치 방어 메커닉 실측 확정) | 2026-04-17 | 완료 |
|
|
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) - 동작 흐름:
OnPointerDown→isTouching = true+Play_Defence()호출 →ActorStatus = eActorStatus.Defecne- 터치 유지 동안 매 프레임
Update()에서m_onHold?.Invoke()(현재null바인딩이라 no-op) 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종 설계 문서:
프로젝트/수상한잡화점/시뮬레이터/01_시뮬레이터_아키텍처_v1.md— 독립성 보장 + 어셈블리 분리 설계프로젝트/수상한잡화점/시뮬레이터/02_시나리오_JSON_스키마_v1.md— 입력 포맷프로젝트/수상한잡화점/시뮬레이터/03_결과_JSON_포맷_v1.md— 출력 포맷프로젝트/수상한잡화점/시뮬레이터/04_MCP_호출_스니펫_v1.md— 기획팀장용 복붙 템플릿 3종
실행 코드 스켈레톤 (독립 어셈블리, Editor-only):
Assets/Sim/BurningTimes.Sim.asmdefAssets/Sim/Runtime/SimulationRunner.csAssets/Sim/Runtime/ScenarioLoader.csAssets/Sim/Runtime/ResultEmitter.csAssets/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_Defenceoverride 부재. 추정 금지, 실측 기록
7. 후속 작업
7-1. 개발팀 (본 응답서 발신과 동시 완료)
- Q-P2 3서브 질의 실측 확정
- 시뮬 인프라 4종 설계 문서
- Sim 어셈블리·스켈레톤 코드 작성
- PD 지시 로그 #37 진행중→완료 갱신
- 수상한잡화점 대화로그 엔트리 (기각안 포함)
7-2. 기획팀 필요 액션
- 터치 방어 수치 가정 정정 (50% → 30%, 1회 → 지속형, 쿨다운 없음)
- Q-P1 재평가 (본 실측 기반 의도 재확인)
- 시나리오 JSON 작성 (§5의 02 스키마 참조) → Unity MCP 실행 요청
- 기획팀장이 Q-P2 정책 최종 결정 후 개발팀에 공유 (코드 변경 필요 시 별도 PR)
7-3. PM 조율 필요
- 본 PD 지시 #37 완료 아카이브 이동 + C20-1-A 자동 push
- 기획팀에 본 응답서 전달 (본 문서 완료 이동 시 자동 공유됨)
부록. 변경 이력
- v1 (2026-04-17): 초판. 개발팀장. Unity 프로젝트 Dev 브랜치
43b6074c4기준 실측.