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

11 KiB

type from to subject date status related depends_on
응답서 개발팀장 총괄PM / 기획팀장 Phase 0-C Q-P2 정밀 2차 응답 (터치 방어 메커닉 실측 확정) 2026-04-17 완료
공유/소통/완료/2026-04-17_Phase0-C_QP_응답서_개발팀.md
프로젝트/수상한잡화점/기획/Phase0_1_앵커전투시뮬레이션_v1.md
프로젝트/수상한잡화점/개발/08_전투시스템_SOT_v1.md
PD 지시

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-783if (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:39m_PCDefence.Set(m_PCActor.Play_Defence, m_PCActor.Release_Defence, null)
  • 동작 흐름:
    1. OnPointerDownisTouching = true + Play_Defence() 호출 → ActorStatus = eActorStatus.Defecne
    2. 터치 유지 동안 매 프레임 Update()에서 m_onHold?.Invoke() (현재 null 바인딩이라 no-op)
    3. OnPointerUp·OnPointerExit·OnDisableisTouching = false + Release_Defence()ActorStatus = eActorStatus.Idle
  • 지속 중 피격 처리: Actor.cs:515-519 — 데미지 계산 완료 후 ActorStatus == Defecnehuddmg.Set_Block(dmg, ...) + PCBlock 이펙트 재생. 매 피격마다 PCDefence_Mul(30%) + PCDefence(1) 감소가 반복 적용
  • 상태 중 공격 차단: Actor.cs:4500ActorStatus == Defecne 시 공격 프레임 return. 즉 방어 중 DPS 0
  • 상태 중 Hit 애니메이션 차단: PCActor.cs:133ActorStatus == DefecnePlay_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):

  • 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. 개발팀 (본 응답서 발신과 동시 완료)

  • Q-P2 3서브 질의 실측 확정
  • 시뮬 인프라 4종 설계 문서
  • Sim 어셈블리·스켈레톤 코드 작성
  • PD 지시 로그 #37 진행중→완료 갱신
  • 수상한잡화점 대화로그 엔트리 (기각안 포함)

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 기준 실측.