Commit Graph

273 Commits

Author SHA1 Message Date
깃 관리자 f292eb4fb3 feat(BT12-Dev Phase B): A06 독 늪·A11 정령불 신규 + 1키·2키 매핑 (PD 지시 2026-05-13)
신규 Effector 2종:
- PoisonSwampSpawner — Category C (PlacementPersistent)
  · 가장 가까운 적 위치 spawn·6초 유지·BoxCollider2D isTrigger·Kinematic Rigidbody2D
  · PoisonSwampInstance — OnTriggerStay 영역 적 마킹·PoisonedEnemyMarker 부착·duration 5초 갱신
  · PoisonedEnemyMarker — 매 초 10 피해·FX_Venom_Spray 자식 spawn (DotFxPrefab)·duration 만료 시 자가 소멸
- SpiritFireSpawner — Category D (Minion)
  · Player 자식 spawn·8초 유지·OverlapCircle radius 2.5
  · SpiritFireInstance — 매 초 근접 적 5 피해·Time.unscaledTime 영역 lifecycle

SkillFireEvent.Execute switch 확장:
- PlacementPersistent case → PoisonSwampSpawner
- Minion case → SpiritFireSpawner

A06 독 늪 .asset 신규 — Category 2·BaseCooldown 10·BaseDamage 10·OnHitFxPrefab=FX_Venom_Swamp·OnDotFxPrefab=FX_Venom_Spray
A11 정령불 .asset 신규 — Category 3·BaseCooldown 15·BaseDamage 5·MinionLifetime 8·OnHitFxPrefab=FX_Rotating shield

SkillRuntimeFactory.AvailableCardIds — A06·A11 추가 (7→9종)
TestSkillFireOn1to5 — PoisonSwamp·SpiritFire 인스턴스 신규·Category 분기 추가 (CardId 기반 MeleeArea 분기 정합)

PD Inspector 영역 — Player.prefab TestSkillFireOn1to5 Skill1=A06·Skill2=A11 .asset drag&drop 필요.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 23:06:59 +09:00
깃 관리자 5077f5dd3f feat(BT12-Dev Phase A): A12 정화의 빛 신규·A08 저주의 화살 이펙트 적용 (PD 지시 2026-05-13)
신규 ActiveSkillData 필드:
- CastFxPrefab — 시전 FX (발사 시점 Player 위치 spawn·비주얼 전용)
- ProjectileSpawner.Trigger 영역 CastFxPrefab spawn 처리 (HitFxScale·FxRotation·FxAutoDestroyUnscaled 2초 cap)

A08 저주의 화살 이펙트 적용 (.asset 수정):
- ProjectilePrefab = FX_PinkMagicArrow
- OnHitFxPrefab = FX_PinkMagicArrow_Hit
- CastFxPrefab = FX_PinkArrow_Shoot
- MaxRange 6·ProjectileSpeed 8 (단거리 빠른 발사)
- OffsetDistance float 0.5 → Vector2 (0,0) (직전 필드 전환 정합)

A12 정화의 빛 신규 (.asset 신규):
- Category 1 (MeleeArea·MeleeAreaSpawner 발동)
- BaseCooldown 5·BaseDamage 15·HitboxSize 4×4·AttributeTags 4 (Frost)
- OnHitFxPrefab = FX_Icelight_Seal

SkillRuntimeFactory.AvailableCardIds — A08·A12 추가 (카드 풀 5→7종)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 23:01:24 +09:00
깃 관리자 b23e00fd65 fix(BT12-Dev): ParticleGroupView InputSystem 전환·activeInputHandler revert (PD 지시 2026-05-13)
PD 지시 — 스크립트 유지·버그만 fix.

ParticleGroupView (2).cs 변경:
- using UnityEngine.InputSystem·UnityEngine.InputSystem.UI 추가
- StandaloneInputModule → InputSystemUIInputModule (L110)
- Input.GetKeyDown(KeyCode.X) → Keyboard.current.xxxKey.wasPressedThisFrame (L155·161·167)

ProjectSettings activeInputHandler 2 → 1 revert (PD 의도 Input System Package only 보존).

본 PM 자성 #14 — 직전 commit b30976a 영역 미승인 .cs 삭제 사건 정정·.cs 유지·버그만 fix 정합.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 22:11:56 +09:00
깃 관리자 ebedf6d9ee fix(BT12-Dev): A04 번개 충격 적 유무 무관 자동 발동 (PD 지시 2026-05-13)
원인: LightningStrikeSpawner.Trigger 영역 candidates.Count == 0 시 즉시 return → 적 0명 영역 발동 X.
fix: candidates 0 시 Player 위치 영역 fallback (primaryPos = inventory.transform.position) → 일정 쿨타임 자동 발동.

A05 MeleeAreaSpawner·A_Laser LaserSpawner = Player 위치 기준 발동·적 무관 영역 이미 정합.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:28:19 +09:00
깃 관리자 26b0666912 feat(BT12-Dev): MeleeArea 실전 발사 연결 + FX AutoDestroy unscaledTime (PD 지시 2026-05-13)
작업 1 — 스킬 배워도 이펙트 X fix:
- SkillFireEvent.Execute — MeleeArea case 추가 (CardId 분기·TestSkillFireOn1to5 동일 패턴)
  - A04 → LightningStrikeSpawner
  - A_Laser → LaserSpawner
  - 기타 → MeleeAreaSpawner

작업 2 — 맵 이동 중 이펙트 잔상 재발 fix:
- 원인: Object.Destroy(fxGo, t) 영역 second timer 영역 Time.timeScale 영향·timeScale=0 (LevelUp) 영역 호출 정지
- 신규: FxAutoDestroyUnscaled MonoBehaviour — Update 영역 unscaledTime lifetime check 자가 Destroy
- ProjectileSpawner·Projectile·MeleeAreaSpawner·LaserSpawner·LightningStrikeSpawner 모두 영역 Object.Destroy(fx, t) → FxAutoDestroyUnscaled.Attach
- LightningStrikeSpawner.DelayedExtraHitFx — WaitForSeconds → WaitForSecondsRealtime (timeScale=0 영역 정합)

본 PM 자성 #12 — feedback_new_code_existing_system_dependency_unmeasured 위반. Object.Destroy(go, t) 영역 timeScale 영향 사전 측정 누락 (Unity 표준 API).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:26:40 +09:00
깃 관리자 41fa4e4ce7 chore(BT12-Dev): 진단 Debug.Log 회수 (PD 정합 작동 확인 후)
회수 5종:
- ProjectileSpawner.Trigger — [ProjectileSpawner] Trigger
- Projectile.Initialize — [Projectile][Initialize]
- Projectile.SelfDestruct — [Projectile][SelfDestruct]
- Projectile.OnDestroy (메서드 자체) — [Projectile][OnDestroy]
- EnemyController.Update — [EnemyHit][Intersect]·[EnemyHit][Decrement]

보존:
- Projectile.Update lifetime backup SelfDestruct (Log 영역 제거·동작 영역 유지·잔존 차단)
- Initialize 시 CancelInvoke (안전망 유지)

feedback_pm_root_diagnosis_priority 정합 — 근본 원인 (Time.timeScale=0 영역 Invoke 정지·NullReferenceException race) 확정·fix 정합 후 진단 Log revert.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:24:05 +09:00
깃 관리자 705d943e38 fix(BT12-Dev): Projectile unscaledTime — Time.timeScale=0 영역 영구 잔존 차단 (PD 지시 2026-05-13)
근본 원인:
- Time.timeScale=0 (LevelUp 카드 선택 모드) 영역 Time.time 정지 → Invoke(SelfDestruct, lifetime) 영역 호출 X → 영원 잔존
- _spawnTime = Time.time 영역 = lifetime backup check 영역 영역 X

fix:
- _spawnTime = Time.unscaledTime (timeScale 무관)
- Update 영역 lifetime check — Time.unscaledTime - _spawnTime > _lifetime 영역 강제 SelfDestruct
- Wall grace period — Time.unscaledTime 영역 정합
- Invoke 폐기·CancelInvoke 추가 안전 (Initialize 영역 잔존 Invoke 차단)

본 PM 자성 #11 — Time.time vs Time.unscaledTime 영역 사전 측정 누락. Projectile 영역 lifecycle 영역 timeScale 영역 영향 영역 사전 측정 의무 누락.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:21:25 +09:00
깃 관리자 b1931afa15 fix(BT12-Dev): 사망 팝업 타이밍·y -0.6·투사체 lifetime 강화 (PD 지시 2026-05-13)
작업 1 — 죽는 모션 종료 시점 팝업 UI:
- LevelUpManager — Player 사망 상태 영역 HandleLevelUp 호출 시 _pendingLevels 영역 저장
- Update 영역 매 frame Player IsAlive·!_isLevelUpActive check → pending 영역 ShowLevelUpUI 표시
- 죽는 모션 동안 LevelUp 즉시 표시 X·부활 후 표시

작업 2 — Player 사망 모션 y -0.3 추가 (누적 -0.6):
- PlayerDeath.Execute — new Vector3(0f, -0.6f, 0f)

작업 3 — 투사체 잔상 강화 fix + 진단:
- Projectile.Update — lifetime + 0.5 backup 강제 SelfDestruct (Invoke 누락 안전망)
- Projectile.Initialize — [Projectile][Initialize] 진단 Log (회수 의무)
- ProjectileSpawner.Trigger — [ProjectileSpawner] 진단 Log (회수 의무)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:18:31 +09:00
깃 관리자 1437720e50 fix(BT12-Dev): Projectile NullReferenceException + 잔존 fix (PD 보고 2026-05-13)
원인: ProjectileSpawner.Trigger 영역 BoxCollider2D.isTrigger=true 활성 (단계 2) 직후·Initialize (단계 3) 이전 OnTriggerEnter2D 발화 가능 → _runtime=null → NullReferenceException line 187 → SelfDestruct 미호출 → 영구 잔존.

fix:
1. OnTriggerEnter2D 영역 `_runtime == null || _data == null` defensive return
2. Update 영역 `_data == null` 시 즉시 SelfDestruct (잔존 차단)

본 PM 자성 #10 — race condition 사전 측정 누락. ProjectileSpawner.Trigger 영역 collider 부착 시점·Initialize 호출 시점 영역 사이 OnTriggerEnter2D 발화 가능성 사전 측정 X.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:12:51 +09:00
깃 관리자 69a18052a0 fix(BT12-Dev): Player 죽는 모션·부활 물리·투사체 진단 (PD 지시 2026-05-13)
작업 1 — Player 죽는 모션 X fix:
- PlayerDeath.Execute — SetTrigger("hurt") → SetTrigger("hit") (Player.controller parameter 정합: velocityX·velocityY·grounded·attack·dead·hit·combatidle·resurrect·hurt 없음)
- animator.updateMode = AnimatorUpdateMode.UnscaledTime 추가 (EnemyDeath 영역 동일·timeScale=0 영향 차단)

작업 2 — 부활 모션 중 움직임 fix:
- PlayerSpawn.Execute — Rigidbody2D.simulated=true 복원 폐기 (즉시 X)
- EnablePlayerInput.Execute — Rigidbody2D.simulated=true 복원 추가 (2초 후·부활 모션 종료 시점)
- using UnityEngine 추가 (CS0246 회피)

작업 3 — 투사체 잔상 진단 (회수 의무):
- Projectile.SelfDestruct — [Projectile][SelfDestruct] Debug.Log
- Projectile.OnDestroy — [Projectile][OnDestroy] Debug.Log (Destroy 외 경로 검출용)
- PD Console 측정 결과 영역 본 PM 근본 fix 후 revert

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:10:11 +09:00
깃 관리자 c052d78114 fix(BT12-Dev): PlayerSpawn.cs CS0246 컴파일 에러 — using UnityEngine 누락 (PD 보고 2026-05-13)
이전 commit 3a672f0 영역 Rigidbody2D 참조 추가 시 using UnityEngine 영역 누락.
fix: 첫 줄에 using UnityEngine 추가.

본 PM 자성 #8 — 신규 type 영역 (Rigidbody2D) 사용 영역 namespace using 영역 사전 검증 누락.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:04:44 +09:00
깃 관리자 3a672f0591 fix(BT12-Dev): Player 사망 제자리·부활 모션·무적 + FX 잔상 safety cap (PD 지시 2026-05-13)
작업 1 — Player 사망 사라지는 현상 fix:
- PlayerDeath.Execute — Rigidbody2D.simulated=false (gravity 정지·제자리 사망·낙사 차단)

작업 2·3 — 제자리 부활·부활 모션·2초 무적 깜박:
- PlayerSpawn.Execute — Teleport 폐기 (spawn point 영역 → 제자리)
- player.health.Resurrect() 호출 (currentHP=maxHP·invulnerableUntil=2초·Animator dead=false·resurrect Trigger)
- Rigidbody2D.simulated=true 복원
- PlayerInvulnerabilityFlash 영역 IsInvulnerable 자동 깜박 (2초)
- 2초 후 EnablePlayerInput (조작 가능)

작업 4 — FX 잔상 safety cap 5초:
- LaserSpawner.Trigger — fx Object.Destroy 누락 fix (LaserSpawner 영역 본 영역 영역 영역 직접 원인 가능)
- LightningStrikeSpawner.AutoDestroyFx — cap
- MeleeAreaSpawner.Trigger — cap
- Projectile.AutoDestroyOnParticleEnd — cap

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 20:02:43 +09:00
깃 관리자 ebd7086a53 fix(BT12-Dev): 투사체끼리 충돌 X·통과 정합 (PD 지시 2026-05-13)
Projectile.OnTriggerEnter2D 영역 동족 Projectile skip (Wall·Enemy 판정 이전).

원인: fallback Projectile GO 영역 default Layer 0 영역 → 다른 Projectile 영역 isWall=true 판정 → 양쪽 SelfDestruct.
fix: other.GetComponent<Projectile>() != null 시 즉시 return.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:55:17 +09:00
깃 관리자 56a4a362a5 fix(BT12-Dev): 사망 y -0.5→-0.3 + 게임 시작 파이어볼 정지 fix (PD 지시 2026-05-13)
작업 1 — 사망 모션 y -0.5 → -0.3 (EnemyDeath·PlayerDeath)

작업 2 — 게임 시작 시 파이어볼 투사체 정지·잔존 fix:
- ProjectileSpawner.Trigger — facing.sqrMagnitude < 0.01f 시 Vector2.right fallback
- 원인: Player.Facing 영역 (0,0) 영역 → _direction = (0,0) → _speed × deltaTime × (0,0) = 0 → 정지

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:53:59 +09:00
깃 관리자 32ab76fcde feat(BT12-Dev): 스킬 선택 UI 아이콘 fallback 추가 (PD 지시 2026-05-13)
SkillCardSlot.Bind 영역 card.Icon == null fallback:
- _icon — 동적 원 sprite (32×32 알파) + 속성별 색상 (Fire 주황·Frost 하늘·Dark 보라·Lightning 노랑·Physical 흰)
- _glowEffect — 동일 sprite + alpha 0.3 (동심원 빛 효과 정합)
- GetFallbackIconSprite·GetColorByAttribute static helper (정적 캐싱)
- card.Icon 설정 시 정상 sprite 사용 (PD 후속 정식 아이콘 자산 추가 시 자동 정합)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:51:27 +09:00
깃 관리자 18b21256cd fix(BT12-Dev): Enemy·Player 사망 모션 y -0.5 오프셋 (PD 지시 2026-05-13)
EnemyDeath·PlayerDeath Execute 영역 death Animator Trigger 직전 transform.position.y -= 0.5 적용.
sprite 위로 떠 보이는 현상 정정·collider·gameplay 영향 X (Enemy 1초 후 Destroy·Player PlayerSpawn 시 위치 reset).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:49:28 +09:00
깃 관리자 2efcd34177 fix(BT12-Dev): Player 피격 distance 기반 강화 + Enemy HP 자동 fallback (PD 보고 재발 2026-05-13)
작업 1 — Enemy HP 30~40 자동 fallback:
- Health.Awake — RandomMaxHPRange 미설정 + EnemyController 존재 검출 → maxHP = Random.Range(30, 41) 자동
- PD Inspector 설정 의존 폐기 (PD가 매번 직접 영역 안전 X)

작업 2 — Player 피격 distance 기반 강화 + 진단 Debug.Log (회수 의무):
- EnemyController.Update — VisualBounds.Intersects OR distance < 1.5f 단일 조건 fix
- [EnemyHit] 단일 prefix Debug.Log — dist·boundsHit·distHit·invuln·Enemy/Player pos·t
- PD Console 측정 결과 영역 근본 fix 후 본 PM revert
- 본 PM 자성 #7 — 직전 IsGrounded 폐기 fix 효과 X 자인·다른 가설 (Bounds 미 교차) 강력화

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:45:53 +09:00
깃 관리자 b4847b1545 fix(BT12-Dev): Player 피격 X — IsGrounded 조건 폐기 + Enemy HP 30~40 random (PD 지시 2026-05-13)
작업 1 — Player 피격 X fix:
- EnemyController.Update L387-396 — IsGrounded 조건 폐기 + 진단 Debug.Log 2종 revert
- PD 명시 "닿아도 피해" = ground·공중 무관 피격 (직전 2026-05-11 "공중 통과" 명시 폐기)
- VisualBounds.Intersects(Player.Bounds) + !IsInvulnerable 단일 조건

작업 2 — Enemy HP 30~40 random:
- Health.RandomMaxHPRange (Vector2Int) Inspector 필드 신규
- Health.Awake — RandomMaxHPRange.x>0 시 maxHP = Random.Range(min, max+1)·maxHearts 자동 산정·currentHP 갱신
- Enemy.prefab Inspector RandomMaxHPRange = (30, 40) PD 직접 설정 필요

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:42:12 +09:00
깃 관리자 0ad1325be8 feat(BT12-Dev): 게임 시작 시 기본 파이어볼 A02 자동 습득 (PD 지시 2026-05-13)
- PlayerSkillInventory.StartingCardIds (string[]) Inspector 필드 신규 — 기본 { "A02" }
- Start() 메서드 신규 — Resources 로드 완료 후 시점에 AddSkillByCardId 일괄 호출
- 다중 스킬 지원·잘못된 CardId 자동 skip (AddSkillByCardId LogWarning 정합)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:38:36 +09:00
깃 관리자 e8779df125 fix(BT12-Dev): A05·A_Laser 박스 시각 off 정정 + Player 피격 X 진단 Debug.Log
작업 1 — A05·A_Laser 박스 SpriteRenderer.enabled 누락 정정:
- MeleeAreaSpawner·LaserSpawner 영역 직접 GO 생성·SpriteRenderer 부착 (HitboxDebug 미경유 영역).
- sr.enabled = HitboxDebug.ShowDebugVisuals 1줄 추가 (재활용 toggle 정합).

작업 2 — Player 피격 X 진단 Debug.Log 추가 (회수 의무):
- EnemyController.Update L387-396 — VisualBounds.Intersects(Player.Bounds)·IsGrounded·IsInvulnerable 측정.
- [EnemyHit][Intersect] (조건 측정)·[EnemyHit][Decrement] (실제 호출) 2종 prefix.
- PD Console 측정 후 본 PM 가설 검증·근본 fix 후 Debug.Log 회수.
- 본 PM 가설: (1) Enemy patrol 거리 영역 Player 근접 X (2) Enemy maxHearts=1 자동 공격 즉시 처치 (3) IsGrounded false 영역 통과.

feedback_pm_root_diagnosis_priority 정합 — 가설 추정 사전 진단 우선.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:32:34 +09:00
깃 관리자 d26bd837ea feat(BT12-Dev): 디버그 시각화 off 토글·레벨업 카드 풀 5종 한정 (PD 지시 2026-05-13)
작업 1 — 디버그 박스·사거리 박스 시각화 off (재활용 toggle):
- HitboxDebug.ShowDebugVisuals 정적 플래그 신규 (false 기본·true 설정 시 즉시 노출)
- Spawn·AttachSprite·SpawnRange·SpawnHitboxDebugChild 4 위치 SpriteRenderer.enabled 정합
- GameObject 자체는 정상 spawn → LiveHitboxSync 등 부착 코드 무영향

작업 2 — 레벨업 카드 풀 5종 한정:
- SkillRuntimeFactory.AvailableCardIds HashSet (A02·A13·A04·A05·A_Laser)
- RandomDraw3 영역 화이트리스트 필터 추가
- 미완성 placeholder (A01·A03·A08·A14·A15) 카드 풀 제외

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:24:46 +09:00
깃 관리자 5b2a0329cc fix(BT12-Dev): .asset 6 PD Inspector 작업 복구 (reset --hard 영역 폐기 정정)
본 PM 직전 commit ab40b27 시점 git reset --hard origin/main 영역 PD Inspector 작업 .asset 영역 폐기 사고 발생.
reflog 영역 e2bc95f (rebase 폐기 commit) 영역 PD 최종 작업 영역 보존 확인·6 .asset 영역 복구.

복구 .asset 6:
- A02_paieobol·A05_hakikjin·A13_cheondoongbal·A15_chujeok_hwayeomgu·A_Laser·A04_thunder
- 주요 복구 영역: MaxRange·ProjectileSpeed PD Inspector 직접 설정 값

ExtraHitFxPrefab (A04 FX_Thunder Smoke) 영역 PD 후속 Inspector drag&drop 영역 필요 (e2bc95f 영역 미설정).

본 PM 자성 #4 (헌법급) — git reset --hard 영역 PD 작업 영역 영향 사전 측정 부족·C6 데이터 보호 위반.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:09:20 +09:00
깃 관리자 ab40b27773 feat(BT12-Dev): 투사체 사거리 시각화·Inspector 조절·A04 Extra FX (PD 지시 2026-05-13)
- HitboxDebug.SpawnRange 신규 — 투사체 사거리 파란 박스 (3초 유지·HideFlags.DontSave)
- Projectile._speed·_maxRange = ActiveSkillData.ProjectileSpeed·MaxRange Inspector 직접 (RangeTier·camWidth·mults 계산 폐기)
- PiercingProjectile._speed override 2.5f 폐기 — data.ProjectileSpeed 정합
- ActiveSkillData 신규 필드 3 — MaxRange·ProjectileSpeed·ExtraHitFxPrefab
- LightningStrikeSpawner — ExtraHitFxPrefab 0.6초 후 spawn·y -0.5 (A04 FX_Thunder Smoke 비주얼 전용·판정 무관)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:00:29 +09:00
깃 관리자 4881c6657e 리소스 추가 2026-05-13 18:46:54 +09:00
깃 관리자 60812b96ba feat(BT12-Dev): 스킬 시스템 누적 작업물 (PD 지시 2026-05-12~13)
본 세션 (BurningTimes worktree cranky-wescoff-e855b0) 누적 작업물.
직전 commit 4건 (2ebf313·60e28e3·ea7d32f·f6c6eb5) 영역 외 잔존
미커밋 변경 일괄 commit.

Scripts:
- Health.cs  DecrementBypassInvuln (DoT) + DecrementBypassInvulnWithHit
  (다단 히트) + StartHitFlash + FlashHurtCoroutine + TriggerHitOrHurt
- ActiveSkillData.cs  신규 필드 (DamageFrameDelay·EnableRepeatDamage·
  MaxHitCount·RepeatFrameInterval·OffsetDistance Vector2 등)
- PiercingProjectile.cs  A13 천둥발 관통 + Kinematic Rigidbody2D +
  useFullKinematicContacts + OverlapBox 매 frame
- StatusApplier.cs  ApplyDoT 시 DotFxScale 전달
- TestSkillFireOn1to5.cs  1~5 키 발사 + lazy init EnsureRuntimes

Animator:
- Enemy.controller  Baddie-Hurt self-loop transition (hurt 조건)
- Player.controller  Player-Hit self-loop transition (hit 조건)

Prefab:
- FX_Lightningball.prefab  ball 자식 PS simulationSpace World → Local
- Enemy.prefab  본 세션 측정 조정

Active skill assets (PD Inspector 직접 조정):
- A01·A02·A03·A04·A05·A08·A13·A14·A15·A_Laser
  HitboxSize·OffsetDistance(Vector2)·OffsetXY·FxRotation·HitFxScale·
  DamageFrameDelay·EnableRepeatDamage·MaxHitCount·RepeatFrameInterval

Font:
- NotoSansKR-Regular SDF.asset  본 세션 SDF atlas 갱신

→ 박스↔이펙트 분리 원칙 표준화 (박스 = facing 만 · 이펙트 =
   facing + FxRotation · runtime spawn = HideFlags.DontSave)
→ 모든 피해 시 hit flash + Animator self-loop transition

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 18:05:13 +09:00
깃 관리자 f6c6eb5ef5 fix(BT12-Dev): A05 좌우 베기 이펙트 Player 동조 (PD 지시 2026-05-13)
원인: MeleeAreaSpawner 이펙트 spawn 후 SetParent 미적용.
spawn 시점 world 좌표에서 freeze 되어 Player 전진 시
이펙트가 뒤로 밀려 보이는 현상.
박스(판정) 는 이미 Player 자식 부착이라 동조 정상.

정정:
- fxGo.transform.SetParent(inventory.transform, true)
- worldPositionStays=true 로 spawn 직후의 world 위치·rotation·scale 유지
  + Player 이동에 자동 동조.

검증 (Play 모드):
- Player x: -7 → -5 (Δ+2.0) 이동
  - FX worldPos: -6.80 → -4.80 (Δ+2.0) ✓
  - BOX worldPos: -7.00 → -5.00 (Δ+2.0) ✓

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 17:37:15 +09:00
깃 관리자 ea7d32f437 fix(BT12-Dev): FxRotation 박스 미적용 분리 (PD 진단 2026-05-13)
PD 진단: 박스(판정) 은 facing 좌/우 반전만 받아야 하는데
FxRotation 이 박스에도 함께 적용되어 facing flip 과 결합 시
시각상 두 박스가 X 자로 겹쳐 보이는 현상.

방침:
- 박스(판정) = facing 만 반영 · FxRotation 미적용
- 이펙트(시각) = facing + FxRotation 그대로 (현행)

LaserSpawner:
- 박스 rotation = baseAngle (facing) 만, FxRotation 제외
- 박스 forwardDir = facing.normalized (FxRotation 회전 제외)
- OffsetDistance.x 에 facing sign 반영 (좌/우 위치 반전)
- ApplyLaserDamage 도 동일 정합

MeleeAreaSpawner:
- 박스 localRotation = identity (FxRotation 제거)
- OffsetDistance.x 에 facing sign 반영
- DoOverlapBoxFromPlayer rotation 0 · facing sign 반영

LightningStrikeSpawner:
- 박스 rotation 0 · capturedRot 변수 제거
- HitboxDebug.Spawn 후 rotation 별도 부여 라인 제거
- FixedHitDamageCoroutine 호출 rotZ=0

Projectile:
- transform.rotation = facing 만 (FxRotation 제외)
- root 가 BoxCollider2D + 시각 동시 보유 → 박스 회전 금지 의도

검증 (Play 모드 8 case):
- Laser R/L × Fx 0/90 — 박스 rot=0 또는 180 (FxRotation 무반응)
- Melee R/L × Fx 0/45 — 박스 rot=0 (FxRotation 무반응)
- Proj A13 R/L Fx 0 — 박스 rot=0/180 (facing 만)
- Stop 후 Scene 잔존 0건 (HideFlags.DontSave 유지)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 17:27:49 +09:00
깃 관리자 60e28e32ec fix(BT12-Dev): 스킬 박스·FX Scene 잔존 정정 (PD 지시 2026-05-13)
원인: Scene Assets/Scenes/Ingame.unity 에 이전 Edit Mode 측정 잔존 spawn 6건 영구 저장
- FX_Lightningball(Clone) × 3 (각각 ProjectileHitbox_Debug × 1 자식)
- FX_SLASH(Clone) × 2
- FX_Dragonfire(Clone) × 1

정정 1: Scene 잔존 spawn 6건 일괄 삭제 + Scene 재저장 (Ingame.unity).
정정 2: 모든 runtime spawn GameObject 에 HideFlags.DontSave 부여
       (HitboxDebug · Projectile · LaserSpawner · MeleeAreaSpawner ·
        LightningStrikeSpawner · ProjectileSpawner · EnemyStateComponents)
       → Scene 저장 시 무시 + Play→Stop 자동 cleanup.

검증: Play 모드 1회 발사 시 박스 1개만 spawn (LaserHitbox_Debug 1·
     A13 ProjectileHitbox_Debug 1) · Stop 후 Scene 잔존 0건 확인.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 17:20:40 +09:00
깃 관리자 2ebf3130c2 feat(BT12-Dev): 5 스킬 통합·1~5 키 발사 시스템 (PD 지시 2026-05-13)
자동 sync 영역 누락된 Font asset 변경 1건 정리 commit.

이전 자동 commit 0596e2c (2026-05-13 01:48) 영역 포함된 본 PM 작업물:
- 카메라 정합 (ortho 4.5·TargetOffset 1.95·Damping.y 0.3·DeadZone 0)
- Enemy maxHP 20·Hit/Hurt Animator·DoT 깜빡 효과
- A02 파이어볼 이펙트 (FX_Fireball_Bullet·FX_FireHit_02·FX_Fire(Cartoon)·페이드아웃)
- A04 번개 충격 (FX_Thunder·20% 축소·4/5 시점 데미지)
- A05 학익진 (MeleeAreaSpawner·FX_SLASH)
- A_Laser 용염 레이저 (LaserSpawner·FX_Dragonfire·40프레임 후~소멸까지 tick)
- A13 천둥발 변경 (PiercingProjectile·FX_Lightningball·관통·0.2s 영역)
- TestSkillFireOn1to5 (1~5 키 영역 5 스킬 발사 테스트)
- Health.DecrementBypassInvuln·EnemyDeath DoT 연결·Projectile fade·방향 회전
2026-05-13 01:49:20 +09:00
깃 관리자 0596e2c4c0 auto: 2026-05-13 01:48 · scene: Lobby · 1494 files 2026-05-13 01:48:30 +09:00
깃 관리자 4ecfbed0e5 auto: 2026-05-12 22:57 · scene: Lobby · 6 files 2026-05-12 22:57:08 +09:00
깃 관리자 11cfb4310d fix(BT12-Dev): Tutorials 폴더 전체 폐기 (TutorialCallbacks.cs 컴파일 에러 정정)
PD: "TutorialCallbacks.cs(2,23): CS0234 Unity.Tutorials.Core not exist"

근본:
- 직전 commit 8793f7b에서 Tutorial 패키지 제거
- Assets/Tutorials/SharedAssets/TutorialCallbacks.cs 등이 Unity.Tutorials.Core 참조
- 패키지 제거 후 namespace 부재 → 컴파일 에러

fix:
- Assets/Tutorials 폴더 전체 폐기 (Tutorial 패키지 정합)
  - 5개 챕터 (1_GetStarted·2_EditorBasics·3_ChangeColors·4_AddAnEnemy·5_BuildAndPublish)
  - SharedAssets (TutorialCallbacks·Unity.Platformer.Tutorials.asmdef 등)
  - WelcomeDialog·TutorialProjectSettings

회귀 영역 X:
- Tutorial 자체 미사용·게임 로직 무관

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 22:41:20 +09:00
깃 관리자 93906d83f3 fix(BT12-Dev): Tutorial Framework 패키지 제거 (SceneObjectGuid 중복 GUID 근본 해결)
PD: "여전히 에러 발생중 — ArgumentException SceneObjectGuid Register"

근본:
- 직전 commit 4714299에서 Scene Player의 SceneObjectGuid 제거했으나
- Unity Tutorial Framework 패키지 (com.unity.learn.iet-framework 5.0.3) 자체 활성
- OnValidate hook이 잔존 SceneObjectGuid 등록 시도 → 중복 GUID dictionary 등록

fix:
1. Packages/manifest.json — com.unity.learn.iet-framework 의존 제거
2. Scene 추가 SceneObjectGuid 폐기 (Token 1개 잔존 확인·폐기)
3. Tutorial 패키지 자체 제거 → OnValidate hook 영역 제거·근본

회귀 영역 X:
- Tutorial Framework는 Unity 학습용·게임 로직 무관
- 다른 패키지 영향 X

PD Editor 재시작 권고 — Library/PackageCache 영역 reload 후 SceneObjectGuid type 완전 제거.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 22:41:20 +09:00
깃 관리자 04294a9e3e fix(BT12-Dev): SceneObjectGuid 중복 GUID 폐기 (Tutorial 잔존 영역)
PD: "ArgumentException: An item with the same key has already been added.
Key: 853d1d12-048e-49ae-b0d4-916bccd493cf
Unity.Tutorials.Core.SceneObjectGuidManager.Register"

원인:
- Unity Tutorial Framework SceneObjectGuid 컴포넌트가 Player에 잔존
- Editor OnValidate·Variant prefab 영역 등록 시 GUID dictionary 중복 → ArgumentException

fix:
- Scene 영역 SceneObjectGuid 컴포넌트 폐기 (Player 1개)
- Enemy.prefab·Variant 6 prefab 영역 SceneObjectGuid 확인 (모두 부재)

회귀 영역 X:
- Tutorial Framework 미사용·SceneObjectGuid 게임 로직 의존 X
- Player·Enemy·Animator 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 22:41:20 +09:00
깃 관리자 ce5f89ef0f revert: 16aa6f9 정상 동작 시점 복원 (BT12-Dev Enemy 정지 회귀 일괄 정정)
PD 직접 지시 2026-05-12: "정상 동작 시점으로 되돌린 다음 다시 판단"
- 정상 동작 시점: 6c981ed16aa6f9 push 정합 (Variant 6개 SpriteRenderer 종별 idle01 override)
- 회귀 commit 22개 (16aa6f9..5f360ca) 일괄 환원

근본 원인 (Play 측정 확정):
- Player.Health.IsAlive=False·ResurrectPromptUI.showPrompt=True·Time.timeScale=0
- 시작 직후 Player가 Enemy와 충돌해 사망 → 부활 prompt가 timeScale=0 → 모든 frame 정지
- Enemy 코드 자체는 정상 (Rigidbody2D Kinematic·body 연결·CF useTriggers=False·IsGrounded=True)
- 본 PM이 5f360ca까지 누적한 Enemy 측 변경은 헛짚음

16aa6f9 시점 기반 위에 PD 요구 사항 (Visual 자식 분리·Variant 종별 patrol 동작·발판 가장자리 회피 등)을
한 단계씩 점진 재적용·각 단계 Play 실측으로 회귀 차단 예정.
2026-05-12 22:32:08 +09:00
깃 관리자 5f360ca82f fix(BT12-Dev): IsGrounded 가드 폐기 (6c981ed 정합·Enemy 영구 정지 정정)
PD: "6c981ed 정상 이동·뭐가 달라진건지 확인"

근본 (6c981ed vs HEAD diff 분석):
- fc35179 (2026-05-12)에서 UpdatePatrol 영역에 IsGrounded 가드 추가
  if (control == null || !control.IsGrounded) { move.x=0; return; }
- 의도: 공중 낙하 시 patrol skip·자연 낙하 우선
- 실제: KinematicObject.FixedUpdate가 매 frame 호출되어 IsGrounded 갱신해야 동작
- Enemy spawn 직후 IsGrounded=False (default) → patrol skip → move=0
- FixedUpdate가 호출되어도 velocity 영역 패턴 영역
- 매 frame IsGrounded=False 가능성 영역 → 영구 정지 루프

6c981ed (정상 동작 시점):
- UpdatePatrol에 IsGrounded 가드 없음
- patrol 영역 항상 진행 → move=Clamp(dx, -1, 1) → ComputeVelocity →
  targetVelocity → FixedUpdate → velocity·position 정상

fix:
- IsGrounded 가드 제거·control NULL 가드만 유지
- patrol 영역 항상 동작·KinematicObject 자연 낙하·gravity 영역 무관
- 공중 spawn Enemy도 patrol 영역 시도 (FixedUpdate gravity·Cast로 자연 정착)

회귀 영역 X:
- KinematicObject Awake 초기화·Update/FixedUpdate override·sr/anim/body 영역 정합
- cliffCheck·waitTimer·stuckTimer·TriggerReverse 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 18:34:07 +09:00
깃 관리자 35923be06d fix(BT12-Dev): KinematicObject base magic method override·body 초기화 (Enemy 영구 정지 근본)
PD: "여전히 움직이지 않아·실측해보고 근본 원인 체크"

근본 (MCP Play 실측·자성 #12·#13):
- KinematicObject.OnEnable·Start·Update·FixedUpdate 모두 `protected virtual`
- AnimationController는 KinematicObject 상속하지만 override X
- Unity는 Component 정의된 magic method만 호출·base class virtual은 derived가 override 안 하면 호출 안 됨
- 결과: KinematicObject.OnEnable 호출 X → body=NULL·KinematicObject.FixedUpdate 호출 X → velocity 갱신 X·gravity 적용 X
- Enemy 자연 낙하 X·patrol 동작 X·영구 정지

검증:
- MCP Play 후 body field reflection 읽기 → NULL
- Rigidbody2D 컴포넌트 자체는 GetComponent OK·OnEnable이 body 설정 안 함

fix (AnimationController):
1. Awake 영역에 base 초기화 위임:
   - body = GetComponent<Rigidbody2D>()·body.bodyType = Kinematic
   - contactFilter.useTriggers/SetLayerMask/useLayerMask
2. Update·FixedUpdate override 추가:
   - protected override void Update() { base.Update(); }
   - protected override void FixedUpdate() { base.FixedUpdate(); }
   - Unity가 AnimationController 인스턴스의 Update/FixedUpdate 호출 → base 실행

검증 후 (MCP Play):
- body=OK·IsGrounded=True·자연 낙하 정합 (pos.y=-2.5 등)
- Enemy 일부 발판 위 정착·일부 InfiniteHorizontalGround 영역 밖 무한 낙하 (별건)

회귀 영역 X:
- spriteRenderer/animator GetComponentInChildren·field initializer 가드 영역 영역 X
- KinematicObject 자체 영역 영역 X (다른 KinematicObject 상속 클래스는 별도 검증)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:57:01 +09:00
깃 관리자 899bbf16f9 fix(BT12-Dev): AnimationController field initializer NRE 정정 (Awake 실행·sr/anim/body 초기화)
PD: "여전히 움직이지 않아·실측·근본 원인 체크"

근본 (MCP Play 실측·자성 #12·#13):
- AnimationController field initializer: PlatformerModel model = Simulation.GetModel<PlatformerModel>()
- Editor·Play mode 전환 시 Simulation.GetModel 호출이 인스턴스 컨텍스트 외부에서 실행
- field initializer 영역 NRE/Exception → Component 생성 자체 실패
- Awake/OnEnable 모두 호출 X
- 결과: spriteRenderer/animator/body 모두 NULL
- AnimationController.ComputeVelocity NRE → KinematicObject.Update/FixedUpdate 영역 실행되나
  spriteRenderer.flipX/animator.SetFloat 호출 NRE → ComputeVelocity 영역 중단·targetVelocity 미설정
- velocity=0·move=0·Enemy 영구 정지

fix:
1. field initializer 폐기·Awake 영역 try-catch로 안전 초기화
   - try { model = Simulation.GetModel<PlatformerModel>(); } catch { model = null; }
2. ComputeVelocity에서 spriteRenderer/animator NULL 가드
3. model NULL 시 jumpModifier=1·jumpDeceleration=0.5 default

검증 (MCP Play):
- 직전: sr=NULL·anim=NULL·body=NULL
- 정정 후: sr=OK·anim=OK·body=OK·IsGrounded=True

회귀 영역 X:
- spriteRenderer/animator GetComponentInChildren fallback 정합
- KinematicObject·EnemyController·patrol·cliffCheck 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:30:01 +09:00
깃 관리자 a502c7aca6 fix(BT12-Dev): 양측 cliff wait 영역 재설정 영역 폐기 (영구 정지 정정)
PD: "몬스터들이 움직이지 않아"

근본 (MCP Play 실측):
- 4c5e33a에서 양측 cliff 분기에 _waitTimer = Random(1, 3) 추가
- 매 frame 양측 cliff 검사 → wait 재설정 → wait 가드 (line 283) return
- waitTimer가 0 도달하지 못함·patrol/cliffCheck 모두 차단·영구 정지

fix:
- 양측 cliff 영역 _waitTimer 재설정 폐기
- move.x=0·stuckTimer=0·return만 유지
- waitTimer는 patrol arrive 영역만 설정 (정상 사이클 유지)

회귀 영역 X:
- cliffCheck Trigger 제외·Enemy 영역 상대·IsGrounded 가드 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:19:44 +09:00
깃 관리자 486a149cd0 fix(BT12-Dev): cliffCheck Trigger 제외 (CinemachineConfiner Trigger false positive)
PD: "발판 가장자리에 버티고 대기"

근본 (MCP Play 실측·자성 #13):
- cliffCheck Physics2D.Raycast가 Trigger collider도 hit (queriesHitTriggers=true 기본값)
- CinemachineConfiner: Layer 0·PolygonCollider2D·**isTrigger=True**·맵 전체 영역
- Raycast가 Confiner Trigger를 ground로 오인 → 발판 끝에서도 cliff 미감지
- Enemy가 발판 밖으로 진행 → 도달 후 wait·정지

fix:
- Physics2D.Raycast → ContactFilter2D 버전 사용
  - cf.useTriggers = false (Trigger 제외·Confiner 무시)
  - cf.useLayerMask = true·layerMask = groundLayerMask
- 실제 발판/바닥 Solid Collider만 hit → cliff 정확 감지 → TriggerReverse·정상 patrol

회귀 영역 X:
- Wall LayerMask·Composite·발판 PlatformEffector 영역 영역 X
- 직전 Projectile useTriggers=false 패턴 정합 (BT12-Dev 2026-05-10)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:08:05 +09:00
깃 관리자 f13132ca9c fix(BT12-Dev): MeasureSafeWalkDistance 폐기·patrolMaxRange 사용
PD: "발판 가장자리까지 이동 후 멈춰있음"

근본:
- MeasureSafeWalkDistance가 Level Tilemap·AutoForeground Tilemap 의존
- Level 비활성·AutoForeground 부재 → groundTilemaps.Count=0 → return 0
- _maxRightRange=0·_maxLeftRange=0
- SetNextPatrolTarget: _targetX = _startX + Min(range, 0) = _startX
- Enemy spawn 위치 = patrol target → 즉시 arrive → wait → phase 반복 → 영구 정지

fix:
- Start 영역에서 MeasureSafeWalkDistance 호출 폐기
- _maxRightRange = _maxLeftRange = patrolMaxRange (10)
- SetNextPatrolTarget: _targetX = _startX ± Min(range, 10) → 정상 patrol
- 실제 절벽 회피는 매 frame cliffCheck Raycast (직전 a4bf508 Enemy 영역 상대)

회귀 영역 X:
- IsGrounded 가드·cliffCheck 양측 검사·KinematicObject·2D AABB Player 피격 영역 영역 X
- MeasureSafeWalkDistance 메서드는 코드 잔존 (다른 호출 없음·후속 정리)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:03:49 +09:00
깃 관리자 a4bf5086de fix(BT12-Dev): cliffCheck footAhead Enemy 영역 상대 (가장자리 걸쳐 대기 정정)
PD: "발판 가장자리 걸쳐 방향 전환 X·영구 대기"

근본:
- cliffCheckDistance=1.0 절대값 사용
- Type1 발판 폭 1.54·반=0.77 < cliffCheckDistance 1.0
- Enemy bounds.center가 발판 안에 있어도 ±1.0 unit footAhead는 양측 발판 밖
- → 양측 cliff 검출 → 영구 대기

fix:
- footAhead = bounds.center + moveDir * (bounds.extents.x + 0.15)
- Enemy 영역 가장자리 + 0.15 unit 마진 (Enemy 실제 발이 닿는 위치)
- Enemy 발판 안 → 전방만 cliff → TriggerReverse·정상 방향 전환
- Enemy 발판 가장자리 (extents 밖) → 양측 cliff → 제자리 대기 (좁은 발판)

회귀 영역 X:
- IsGrounded 가드·매 frame cliffCheck·2D AABB Player 피격 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:01:00 +09:00
깃 관리자 4c5e33ab46 fix(BT12-Dev): cliffCheck 양측 검사·발판 폭 좁을 시 제자리 대기
PD: "발판과 같이 떨어질 수 있는 위치 가장자리에서 방향 바꿔서 정상 patrol·순찰 범위 너무 짧으면 제자리 대기"

근본:
- 전방 cliffCheck만 검사 → 발판 폭이 Enemy 영역 2배 미만일 때
- TriggerReverse → 반대편도 cliff → 다시 TriggerReverse → 좌우 영구 반복

fix:
- 전방 cliff 감지 시 반대편(-moveDir)도 추가 검사
- 전방만 cliff → TriggerReverse (방향 전환·정상 patrol)
- 양측 cliff → 발판 폭 좁음 → 제자리 대기 (move.x=0·waitTimer 재설정)

회귀 영역 X:
- IsGrounded 가드·매 frame cliffCheck·KinematicObject·2D AABB 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:58:29 +09:00
깃 관리자 da6e694d5c fix(BT12-Dev): Player 피격 — Bounds.Intersects → 2D AABB (Z 무시)
PD: "지시 수정 정합 X·변화 X"

근본 (MCP Play 직접 실측·자성 #13):
- Enemy 강제 Player 위치 이동 후에도 Intersects=False
- Bounds 분석:
  - Enemy z=0 (Variant prefab default)
  - Player z=1 (Scene 영역)
  - Bounds.Intersects는 3D 비교 → Z 1 unit 차이로 항상 false

fix:
- Bounds.Intersects 폐기·2D AABB 직접 검사
- Mathf.Abs(deltaX) < (eExtents.x + pExtents.x) && deltaY 동일
- Z 좌표 무시·2D 게임 정합

회귀 영역 X:
- IsGrounded 조건·cliffCheck·KinematicObject·VisualBounds 영역 영역 X
- 영역 1 (cliffCheck 매 frame) 정합 유지

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:55:06 +09:00
깃 관리자 e3e4f97a6f fix(BT12-Dev): cliffCheck 매 frame·VisualBounds → SpriteRenderer 정정
PD 영역 1: 발판 위 Enemy 가장자리에서 방향 전환 X·한방만 바라보다 떨어짐
PD 영역 2: Player 피격 X

근본:
1. cliffCheck phaseCooldown 가드
   - TriggerReverse 시 phaseCooldown=1.0s 설정·이 동안 cliffCheck 비활성
   - 발판 끝 회피 후 1초간 cliff 미감지 → KinematicObject 진행 → 발판 밖 → 낙하
2. VisualBounds = Collider.bounds (직전 daad311)
   - CapsuleCollider 작음 (0.33×0.33)·Player BoxCollider (0.77×1.02)
   - Intersects 영역 너무 좁아 hit X

fix:
1. cliffCheck phaseCooldown 가드 폐기·매 frame 검사
   - stuckTimer만 phaseCooldown 가드 유지 (좌우 반복 방지)
2. VisualBounds = Visual.SpriteRenderer.bounds 우선
   - sprite 실제 시각 영역·Player 접촉 판정 정합

회귀 영역 X:
- IsGrounded 가드·TriggerReverse·KinematicObject 영역 영역 X
- Player IsGrounded 조건 유지 (밟기 X·점프 통과 정합)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:51:44 +09:00
깃 관리자 fc351795e7 fix(BT12-Dev): UpdatePatrol IsGrounded=True 영역만 동작 (공중 낙하 시 skip)
PD: "(나)안 — 어느 위치에 있든 절벽 회피·단 순찰 패턴 아닐 때 (공중 낙하 등) 상관 없음"

근본 정리:
- cliffCheck Raycast는 기존부터 정합 (Layer 0 발판·바닥 모두 hit)
- 공중 낙하 시 cliffCheck 적용되면 즉시 TriggerReverse → 자연 낙하 방해

fix:
- UpdatePatrol 시작 영역에 IsGrounded 가드
- control.IsGrounded=False (공중·피격 밀림·spawn 직후 낙하 등) → patrol·cliffCheck skip
  move.x=0·stuckTimer=0·return
- KinematicObject 자연 낙하·바닥/발판 정착 → IsGrounded=True → patrol 재개·cliffCheck 정합

회귀 영역 X:
- 영역 1 (애니메이션 Clip path)·영역 2 (Collider bounds) 정합 유지
- TriggerReverse·MeasureSafeWalkDistance·KinematicObject 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:48:08 +09:00
깃 관리자 daad31171b fix(BT12-Dev): Clip path Visual → '' + VisualBounds → Collider bounds
PD 영역 1: 이동 애니메이션 재생 X
PD 영역 2: Player·Enemy 충돌 시 피해 X

근본:
1. 애니메이션 — Animator가 Visual 자식에 부착됨 + Clip path "Visual"
   - Animator path는 Animator 기준 자식 경로 → "Visual/Visual" 자식 찾음·존재 X
   - SpriteRenderer sprite curve 미적용 → 이동 시 Run sprite 교체 X

2. 피해 — VisualBounds = Visual.SpriteRenderer.bounds
   - Visual 자식 분리 후 sprite bounds는 시각만·실제 Collider 영역과 별
   - Player BoxCollider와 Visual.bounds.Intersects 정합 X

fix:
1. 35 Clip path "Visual" → "" (Animator·SpriteRenderer 동일 GameObject = Visual)
2. EnemyController.VisualBounds = _collider.bounds 우선 (CapsuleCollider 영역·실제 충돌)

영역 3 (발판 위 spawn) — PD 결정 대기 (가/나 분기).

회귀 영역 X:
- Variant Visual 자식 sprite override·AnimationController·KinematicObject 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:46:27 +09:00
깃 관리자 5355222dc7 fix(BT12-Dev): BT102 떨어짐 검출 텔레포트 폐기 (절벽 텔레포트·공중 spawn 회귀 정정)
PD 영역 1+3:
- "절벽에 닿으면 텔레포트" 회귀 — 이전 정상 방향 전환 동작
- "공중 spawn Enemy가 떨어지지 않고 이전 위치로 되돌아감"

근본 (단일):
- EnemyController.Update의 BT102 (line 360-376) 떨어짐 검출 텔레포트
- _isInitialized && y < _startY - fallThreshold(1.0) → 시작 위치 텔레포트
- 절벽 케이스: TriggerReverse 방향 전환 직후 fallThreshold 진입 → 텔레포트가 방향 전환을 덮어씀
- 공중 spawn 케이스: 떨어지는 즉시 fallThreshold 진입 → spawn 위치 복귀 무한 반복

fix:
- BT102 떨어짐 검출 텔레포트 영역 폐기
- 자연 낙하 + TriggerReverse 절벽 방향 전환만 동작
- 공중 spawn Enemy도 자연 낙하·KinematicObject Cast로 GameObject 위 정착

영역 2 (렉) 별건 — PD 측정 영역 필요·후속 안건.

회귀 영역 X:
- TriggerReverse cliffCheck Raycast 절벽 방향 전환 정합
- KinematicObject 자연 낙하·IsGrounded 정합
- Player·Enemy 충돌·발판 통과·Variant 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:40:10 +09:00
깃 관리자 23b0c88178 fix(BT12-Dev): Scene Enemy 16 종별 위치 재spawn (Variant 재생성 시 modification 손상 정정)
PD: "몬스터가 여전히 한 지점에 등장"

근본:
- 직전 commit e38c1a5에서 Variant prefab 폐기/재생성
- Variant 영역 modification(m_LocalPosition.x/y/z value) 영역은 Scene 영역 유지되나
- Variant prefab GUID 변경 X (동일 path)에도 modification target reference 손상 가능
- 결과: Scene 16 instance 모두 prefab default position (0,0,0)으로 표시

fix:
- Scene 16 Enemy 폐기·6c981ed commit 영역 종별 균등 위치 (x 좌표 16개) 재spawn
- 신규 Variant prefab 영역 InstantiatePrefab·종별 정합
  - Wolf 3·Bat 3·ZombieM 3·ZombieF 3·Ghost 2·Spider 2
- y 영역 prefab default (PD Variant prefab Visual 자식 y 조절 정합)·z=0

회귀 영역 X:
- Variant Visual 자식 sprite override·AnimationController GetComponentInChildren·flipX 정합
- KinematicObject·Collider·EnemyController patrol 영역 영역 X

PD 방향 전환 flipX 정정은 별건 — Visual 자식 SpriteRenderer 영역 flipX 적용 정합 (직전 e38c1a5)
PD Editor Play 검증: Enemy 영역 종별 외형·방향 전환 시 flip 정합.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:31:27 +09:00
깃 관리자 69bdbe234c fix(BT12-Dev): Scene 16 Enemy 위치 복원 (Variant 폐기/재생성 시 default position 0,0,0 정정)
PD: "몬스터 위치가 모두 한 지점으로"

근본:
- 직전 e38c1a5에서 Variant 6 prefab 폐기·재생성
- 신규 Variant default position (0,0,0)·Scene 16 instance reference 정합되나 transform override 손상
- 결과: 16 instance 모두 (0,0,0)로 수렴

fix:
- Scene Ingame.unity만 8793f7b (Tutorial 패키지 제거 commit) 영역 복원
- Variant prefab 재생성 변경분 영역 유지 (root SR·Animator 폐기·Visual 자식 sprite override)
- Scene 16 Enemy 영역 위치 (직전 6c981ed 종별 균등 배치) 복원

회귀 영역 X:
- AnimationController RequireComponent 제거·Visual 자식 분리·flipX·sprite Visual 단일화 정합
- root SR/Animator 잔존 영역은 PD Editor 영역 자동 정리 또는 후속

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:24:18 +09:00
깃 관리자 e38c1a5c12 fix(BT12-Dev): AnimationController RequireComponent 제거·Enemy.prefab root SR/Animator 폐기·Variant 6 재생성
PD: "몬스터 방향 전환 시 이미지 잘못 출력"

근본:
- AnimationController에 [RequireComponent(SpriteRenderer, Animator)] 잔존
- Enemy.prefab root SR·Animator 제거 시도가 RequireComponent에 의해 차단
- Variant 6 모두 root SpriteRenderer 잔존·AnimationController.spriteRenderer = root
- ComputeVelocity의 flipX = root에 적용·실제 보이는 Visual 자식 SpriteRenderer 영향 X
- 방향 전환 시 sprite flip 안 됨

fix:
1. AnimationController.cs — [RequireComponent] 제거
2. Enemy.prefab base — root SpriteRenderer·Animator 폐기
3. Variant 6 prefab 재생성 (이전 Variant 폐기·신규)
   - Visual 자식 SpriteRenderer.sprite·Animator.runtimeAnimatorController override
4. Scene 16 Enemy instance root SR·Animator 잔존 폐기
5. 결과: AnimationController.spriteRenderer = GetComponentInChildren<SpriteRenderer>() = Visual.SpriteRenderer
   flipX·sprite·Animator 모두 Visual 자식 단일화

회귀 영역 X:
- Visual 자식 SpriteRenderer·Animator·OverrideController 정합
- KinematicObject·Collider·EnemyController patrol 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:15:43 +09:00
깃 관리자 4b261c9b8b fix(BT12-Dev): Tutorials 폴더 전체 폐기 (TutorialCallbacks.cs 컴파일 에러 정정)
PD: "TutorialCallbacks.cs(2,23): CS0234 Unity.Tutorials.Core not exist"

근본:
- 직전 commit 8793f7b에서 Tutorial 패키지 제거
- Assets/Tutorials/SharedAssets/TutorialCallbacks.cs 등이 Unity.Tutorials.Core 참조
- 패키지 제거 후 namespace 부재 → 컴파일 에러

fix:
- Assets/Tutorials 폴더 전체 폐기 (Tutorial 패키지 정합)
  - 5개 챕터 (1_GetStarted·2_EditorBasics·3_ChangeColors·4_AddAnEnemy·5_BuildAndPublish)
  - SharedAssets (TutorialCallbacks·Unity.Platformer.Tutorials.asmdef 등)
  - WelcomeDialog·TutorialProjectSettings

회귀 영역 X:
- Tutorial 자체 미사용·게임 로직 무관

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:07:08 +09:00
깃 관리자 8793f7b439 fix(BT12-Dev): Tutorial Framework 패키지 제거 (SceneObjectGuid 중복 GUID 근본 해결)
PD: "여전히 에러 발생중 — ArgumentException SceneObjectGuid Register"

근본:
- 직전 commit 4714299에서 Scene Player의 SceneObjectGuid 제거했으나
- Unity Tutorial Framework 패키지 (com.unity.learn.iet-framework 5.0.3) 자체 활성
- OnValidate hook이 잔존 SceneObjectGuid 등록 시도 → 중복 GUID dictionary 등록

fix:
1. Packages/manifest.json — com.unity.learn.iet-framework 의존 제거
2. Scene 추가 SceneObjectGuid 폐기 (Token 1개 잔존 확인·폐기)
3. Tutorial 패키지 자체 제거 → OnValidate hook 영역 제거·근본

회귀 영역 X:
- Tutorial Framework는 Unity 학습용·게임 로직 무관
- 다른 패키지 영향 X

PD Editor 재시작 권고 — Library/PackageCache 영역 reload 후 SceneObjectGuid type 완전 제거.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:58:57 +09:00
깃 관리자 4714299a6f fix(BT12-Dev): SceneObjectGuid 중복 GUID 폐기 (Tutorial 잔존 영역)
PD: "ArgumentException: An item with the same key has already been added.
Key: 853d1d12-048e-49ae-b0d4-916bccd493cf
Unity.Tutorials.Core.SceneObjectGuidManager.Register"

원인:
- Unity Tutorial Framework SceneObjectGuid 컴포넌트가 Player에 잔존
- Editor OnValidate·Variant prefab 영역 등록 시 GUID dictionary 중복 → ArgumentException

fix:
- Scene 영역 SceneObjectGuid 컴포넌트 폐기 (Player 1개)
- Enemy.prefab·Variant 6 prefab 영역 SceneObjectGuid 확인 (모두 부재)

회귀 영역 X:
- Tutorial Framework 미사용·SceneObjectGuid 게임 로직 의존 X
- Player·Enemy·Animator 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:55:12 +09:00
깃 관리자 551bc048a4 feat(BT12-Dev): Visual 자식 분리·Clip path Visual·Variant Visual sprite override
PD: "가 — Visual 자식 분리 (이미지만 위로 띄우기 가능)"

근본:
- Enemy GameObject root에 SpriteRenderer·Animator·Collider 모두 묶임
- prefab y 변경 시 Collider까지 같이 이동 → 시각만 분리 불가

fix:
1. Enemy.prefab — Visual 자식 GameObject 신규
   - root SpriteRenderer·Animator 제거
   - Visual 자식에 SpriteRenderer·Animator 부착·기존 setting 이전
2. 35 AnimationClip path 변경
   - EnemyIdle/Run/Hurt/Death/Attack + 30 M00x Clip
   - path="" → path="Visual" (자식 SpriteRenderer 바인딩)
3. Variant 6개 SpriteRenderer override 재적용
   - Visual.SpriteRenderer.sprite = M00x_idle01_0 종별
   - Visual.Animator.runtimeAnimatorController = M00x.overrideController 종별
4. AnimationController·EnemyController
   - spriteRenderer = GetComponent<SpriteRenderer>() ?? GetComponentInChildren<SpriteRenderer>()
   - animator 동일 패턴
5. Scene 16 Enemy position override 복원 (직전 b41cdf6 revert)

PD Variant prefab 영역 Visual 자식 localPosition.y Inspector 조절 시 시각만 위로 이동·Collider 영역 X.

회귀 영역 X:
- KinematicObject·Collider·Rigidbody·EnemyController patrol·발판 통과 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:53:37 +09:00
깃 관리자 112d8c4fda Revert "fix(BT12-Dev): Scene 16 Enemy position·rotation·scale override 전부 폐기"
This reverts commit b41cdf63fa.
2026-05-12 15:51:55 +09:00
깃 관리자 b41cdf63fa fix(BT12-Dev): Scene 16 Enemy position·rotation·scale override 전부 폐기
PD: "Variant prefab y 조절해도 변화 X·B안 진행·스폰 위치 다양성 추후"

원인:
- Scene 16 instance 각각 transform.position·rotation·scale override 보유
- prefab y 변경 시 override 우선·Scene 무영향

fix:
- PrefabUtility.RevertPropertyOverride — m_LocalPosition·m_LocalRotation·m_LocalScale 16개 instance 폐기
- 결과: 각 Variant prefab default 위치·scale 적용 (PD Inspector 작업분 정합)
  - M001 Wolf y 0.01·scale 1.10
  - M002 Bat y 1.00·scale 0.80
  - M003 ZombieM y 0.01·scale 1.20
  - M004 ZombieF y 0.01·scale 1.10
  - M005 Ghost y 0.40·scale 1.00
  - M006 Spider y 0.01·scale 0.90

이후 Variant prefab y·scale·Collider 영역 PD Inspector 조절 → Scene 16개 일괄 반영.

회귀 영역 X:
- Player·발판·Camera·Token·Animator 영역 영역 X
- 스폰 위치 다양성은 추후 Spawn 시스템 영역 안건

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:43:43 +09:00
깃 관리자 16aa6f9523 fix(BT12-Dev): Variant 6개 SpriteRenderer 종별 idle01 override
PD: "자식 prefab의 sprite가 똑같음 — 종별 개별 sprite로 변경"

근본:
- Variant 6개 SpriteRenderer.sprite 모두 M001_idle01_0 (부모 Enemy.prefab 상속)
- Animator 재생 시 종별 sprite로 교체되나 초기·idle 정지 상태에서 동일

fix:
- M001 Wolf: M001_idle01_0
- M002 Bat: M002_idle01_0
- M003 ZombieM: M003_idle01_0
- M004 ZombieF: M004_idle01_0
- M005 Ghost: M005_idle01_0
- M006 Spider: M006_idle01_0

회귀 영역 X:
- Animator·OverrideController·Scene 16 instance·Player·Enemy 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:22:17 +09:00
깃 관리자 6c981ed567 fix(BT12-Dev): Variant 6개·종별 균등 16·Token 활성 10 최적화
PD: "몬스터 종별 개별 prefab"·"렉 최적화"

1. Enemy.prefab → Variant 6개 신규
   - Enemy_M001_Wolf·M002_Bat·M003_ZombieM·M004_ZombieF·M005_Ghost·M006_Spider
   - 각 Variant Animator.runtimeAnimatorController = M00x.overrideController 직접
   - MonsterRandomizer 컴포넌트 제거 (종별 prefab 영역 자체 결정)

2. Scene 16 Enemy 종별 균등 배치
   - Wolf 3·Bat 3·ZombieM 3·ZombieF 3·Ghost 2·Spider 2
   - 기존 16 instance 폐기·새 Variant 영역 동일 위치 spawn

3. 렉 최적화 — Token 활성 50 → 10
   - 발판 18개 중 10개 균등 선택·각 발판 위 1 Token
   - 90개 비활성 (Sample Microgame IdleLit Light·Animator 영역 영역 영역)
   - Profiler Editor unfocused 정확 측정 한계 — 가장 큰 cost 후보 (Light 100→10) 우선 정정

회귀 영역 X:
- Player·Enemy 충돌·발판 통과·OverrideController·Camera·Background 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:16:22 +09:00
깃 관리자 ddc0e250e5 fix(BT12-Dev): Player ↔ Enemy 닿음 시 피해 복원 (지상만·점프 통과)
PD: "Enemy 닿으면 Player 피해 (밟기는 X·통과)"

근본:
- 직전 commit adcb1ac에서 Player↔Enemy 충돌 검출 자체 폐기
- Player 피해 경로 부재 → 복원 필요·단 밟기는 X

fix (EnemyController.Update):
- _cachedPlayer 캐싱 (Tag·fallback)
- Player.IsGrounded && VisualBounds.Intersects(Player.Bounds)
  → !IsInvulnerable 시 Player.health.Decrement (i-frame 적용)
- 공중 (점프) 상태는 통과·밟기 판정 X·EnemyDeath·Bounce X

회귀 영역 X:
- Enemy 사망 경로: Player 공격(Projectile·AttackHitbox)만 정합
- Player ↔ Enemy IgnoreCollision Awake 적용 정합·물리 통과
- Enemy ↔ Enemy IgnoreLayerCollision·발판 통과·scale·patrol 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 11:24:42 +09:00
깃 관리자 adcb1ac1b1 fix(BT12-Dev): 밟기 공격 기능 제거 — PlayerEnemyCollision 폐기·Player↔Enemy 충돌 검출 제거
PD: "밟아서 적을 공격 가능한 기능 제거 (관련 기능 모두 삭제)"
PD: "몬스터는 Player 공격에만 피해를 받음"

변경:
1. PlayerEnemyCollision.cs·meta 삭제
   - 점프+위 = EnemyDeath·Bounce 로직 폐기
   - 지상 측면·아래 = i-frame 피격 로직 폐기
2. EnemyController.cs
   - hitRangeX·hitRangeY·stompMinDy 필드 폐기
   - Update 영역 Player ↔ Enemy Bounds.Intersects 검출 폐기
   - PlayerEnemyCollision Schedule 폐기
   - _cachedPlayer·_diagWasIntersecting·VisualBounds 사용처 폐기
   - Player ↔ Enemy IgnoreCollision Awake 시점 적용 유지 (물리 통과 정합)

회귀 영역 X:
- Enemy 사망 경로: Player Projectile·AttackHitbox → Health.Decrement → Schedule<EnemyDeath> 정합 유지
- Player 피해 경로: 밟기 충돌 폐기·Enemy 공격 로직 후속 PD 지시 대기
- Enemy patrol·발판 통과·Enemy ↔ Enemy 통과·scale 1.19 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 11:15:20 +09:00
깃 관리자 03a6521631 auto: 2026-05-12 11:03 · scene: Lobby · 42 files 2026-05-12 11:03:10 +09:00
깃 관리자 1531f3e908 feat(BT12-Dev): 30 Clip + Attack state + 6 OverrideController 5 Clip override
PD: "(나) 진행·공격 모션 포함·발동 로직은 후속"

자성: 직전 commit 3803127 EnemyIdle만 override·Run/Hurt/Death 원본 sprite 잔존
→ Run/Hurt 재생 시 다른 몬스터 sprite 노출. 6종 리소스 규칙 사전 미파악.

리소스 (Assets/Monster/):
- 6종: 01 늑대(M001)·02 박쥐(M002)·03 좀비 남(M003)·04 좀비 여(M004)·05 혼령 귀신(M005)·06 거미(M006)
- 종별 idle·run·hit·death·attack frame (run 4~7·hit 2·death 3~4·idle/attack 4)

fix:
1. 30 Clip 생성 — M00x_Idle/Run/Hurt/Death/Attack.anim
   - Idle/Run loop=true·Hurt/Death/Attack loop=false
   - frameRate 12·SetObjectReferenceCurve (m_Sprite)
   - run 5 frames (M001)·7 frames (M002) 종별 정합
2. Enemy.controller 갱신
   - attack Trigger parameter 추가
   - Baddie-Attack state 추가 (placeholder EnemyAttack.anim)
   - Idle → Attack·Run → Attack (attack Trigger)·Attack → Idle (exitTime=1)
3. 6 OverrideController 5 Clip override
   - EnemyIdle/EnemyRun/EnemyHurt/EnemyDeath/EnemyAttack → M00x_Idle/Run/Hurt/Death/Attack
4. 발동 로직 후속 — PD 추후 지시

회귀 영역 X:
- Enemy ↔ Player·Enemy ↔ Enemy IgnoreCollision·발판 통과·scale 1.19 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 02:03:39 +09:00
깃 관리자 81898adab6 fix(BT12-Dev): Enemy ↔ Enemy IgnoreLayerCollision + scale 1.7 → 1.19 (30% 영역)
PD: "몬스터끼리 충돌하지 않고 통과"
PD: "몬스터 크기 30% 영역"

fix:
1. Enemy ↔ Enemy IgnoreLayerCollision
   - Physics2D.IgnoreLayerCollision(14, 14, true)
   - EnemyController.Awake 영역 (idempotent·매번 호출 무관)
2. Enemy.prefab transform.localScale 1.7 → 1.19 (30% 영역)
   - Scene 영역 16 instance prefab override 자동 영역
   - sprite·BoxCollider·CapsuleCollider 비례 영역

회귀 영역 X:
- Enemy ↔ Player IgnoreCollision (Layer 14 ↔ Layer 13 별도) 정합
- Enemy ↔ 발판 IgnoreCollision (PlatformEffector2D 별도) 정합
- KinematicObject minMoveDistance·shellRadius 절대값 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:39:54 +09:00
깃 관리자 38031279d1 fix(BT12-Dev): 몬스터 종류 random — 6 OverrideController·MonsterRandomizer
PD: "몬스터 색을 랜덤으로 하라는 얘기가 아니라 몬스터 종류를 랜덤으로 하라고 했잖아"

자성: 직전 commit 6e774dc에서 PD 의도 오역 — 색 tint 영역. 종류(sprite) random 의도 정합 X.

근본 (MCP 자율 영역):
- Enemy.prefab idleFrames 24 sprite (M001~M006 × 4 idle frame) 영역 영역
- Enemy.controller 4 Clip (EnemyIdle·EnemyRun·EnemyHurt·EnemyDeath)
- 영역: 6 Idle Clip + 6 OverrideController·EnemyIdle만 override

fix:
1. 6 AnimationClip 신규 — M001_Idle ~ M006_Idle.anim
   - 각 4 sprite keyframe·frameRate 12·loopTime=true
   - SetObjectReferenceCurve (m_Sprite property)
2. 6 AnimatorOverrideController 신규 — M001 ~ M006.overrideController
   - runtimeAnimatorController = Enemy.controller
   - EnemyIdle Clip → M00x_Idle Clip override
   - EnemyRun·EnemyHurt·EnemyDeath 영역 (영역 sprite·6종 영역 영역 영역)
3. MonsterRandomizer 영역
   - overrideControllers[6] 영역
   - Awake 영역 random select·animator.runtimeAnimatorController = overrideControllers[idx]
   - 색 tint 영역 폐기
4. Enemy.prefab MonsterRandomizer.overrideControllers 6 OverrideController 영역
5. Scene 영역 활성 Enemy 16개 SpriteRenderer.color = white (이전 tint 영역)

회귀 영역 X:
- Animator (Idle·Run·Hurt·Death) 정합 유지·EnemyIdle만 override
- One-Way Platform·Enemy 발판 IgnoreCollision·Player·Camera 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:37:54 +09:00
깃 관리자 6e774dc375 fix(BT12-Dev): Enemy 발판 IgnoreCollision + MonsterRandomizer 6 색상 tint
PD: "몬스터도 발판 자유 통과"
PD: "몬스터 랜덤 변경"

근본 (MCP 자율 실측):

1. Enemy 발판 통과
   - Layer 14 (Enemy) ↔ Layer 0 (발판) collide=True → Enemy 발판 영역
   - PlatformEffector2D surfaceArc 170°·옆 영역 통과·발판 위 영역 영역
   - fix: EnemyController.Awake 영역 PlatformEffector2D 영역 IgnoreCollision 일괄 등록
     → Enemy 16개 × 발판 17개 모두 IgnoreCollision·발판 영역 영역 X·자유 통과

2. 몬스터 랜덤
   - 직전 MonsterRandomizer 폐기 (Animator 영역)
   - 영역 영역 — 6 Override Controller·24 Clip 신규 영역 영역 영역 영역 영역
   - 영역 — SpriteRenderer.color 6 random tint
     White·Red·Green·Blue·Yellow·Purple·Awake 1회 random
   - Animator (Idle·Run·Hurt·Death) 정합 유지·sprite swap X·tint만 영역
   - 영역 영역 영역·영역 영역 영역 영역

회귀 영역 X:
- One-Way Platform·Player 영역 영역 X·Camera·Wall LayerMask·Composite 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:18:09 +09:00
깃 관리자 567501ceef fix(BT12-Dev): 발판 Y -1.5만·PlatformEffector2D One-Way (Player 점프 통과·착지·Enemy 옆 통과)
PD: "발판이 몬스터 이동 방해·위치 더 높여줘"
PD: "Player 점프 시 막히지 않고 착지 시 올라가야 함"

근본 (MCP 자율 실측):
- Enemy 영역 위치 Y=-1.9·Capsule top -1.56·Sprite top -1.05
- 직전 발판 Y -2.0/-1.5 모두 Enemy capsule top -1.56 영역 영역
  - 발판 Y -2.0 bottom -2.23·-1.56 > -2.23 영역 영역
  - 발판 Y -1.5 bottom -1.73·-1.56 > -1.73 영역 영역

fix:
1. 발판 Y -1.5만·-2.0 폐기 (Enemy capsule top -1.56·발판 bottom -1.73 영역 0.17 unit·영역 영역)
2. PlatformEffector2D One-Way 추가
   - useOneWay=true·surfaceArc=170 (영역 ±85도만 collide)
   - useSideFriction=false·useSideBounce=false
   - BoxCollider2D.usedByEffector=true
   - Player 점프 시 위 영역 통과·착지 시 정합·Enemy 옆 영역 통과
3. Rigidbody2D Static (Effector 정합)
4. Token 54개 — 발판 위 3개씩 (영역 Y -1.5 영역 보상)·비활성 46

회귀 영역 X:
- DeathZone·Confiner·Wall LayerMask·Camera·InfiniteHorizontalGround 영역 영역 X
- One-Way Platform Layer 영역 X·Effector normal 영역 영역 영역

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:14:42 +09:00
깃 관리자 dccd457c00 fix(BT12-Dev): 발판 Y -2.5 폐기·-2.0/-1.5만 (걷기·patrol 영역 영역 X)
PD: "발판 위치를 Player·Enemy 이동 영역 방해되지 않는 높이"

근본 (MCP 자율 산정):
- Player·Enemy 영역 위치 Y -3.61·top -3.10
- 발판 Y -2.5 → bottom -2.73·차이 0.37 unit ← 걷기 방해
- 발판 Y -2.0 → bottom -2.23·차이 0.87 unit ← 영역 영역 X·정합
- 점프 max Y -1.11·발판 Y -2.0/-1.5 모두 점프 영역

fix:
1. 발판 17개 — Y 영역 -2.0/-1.5만 (-2.5 폐기·걷기·patrol 영역 영역 X)
2. Token 39개 — Y -1.5 → 3개·Y -2.0 → 2개 (영역별 보상 컨셉 유지)
3. 비활성 61개

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:02:57 +09:00
깃 관리자 a1975b44a1 fix(BT12-Dev): 발판 점프 영역만·Token 발판 위 보상 (영역별 1·2·3개)
PD: "발판이 걸어다니는 위치에 생성·점프로 도달 가능 위치만"
PD: "Token 일정 간격 배치 어색·보상처럼 느낄 수 있는 지역에만"

근본 (MCP 자율 실측):
- Player 영역 위치 Y=-3.61·top -3.10
- 발판 Y -3.0 → top -2.77·Player 영역 영역 영역 X (걸어 영역 도달)
- 점프 max Y -1.11

fix:
1. 발판 17개 — Y 영역 -2.5/-2.0/-1.5 (점프 영역만)
   - Y -3.0 폐기 (걸어 도달)
   - Y -1.5 영역 발판 영역 점프 max -1.11 영역 영역 도달 (점프 영역 0.39 unit)
2. Token 30개 — 발판 위 보상 (영역별 컨셉)
   - Y -1.5 영역 영역 발판 → 3개 (영역 영역)
   - Y -2.0 영역 발판 → 2개
   - Y -2.5 영역 영역 발판 → 1개
   - 발판 size.x 영역 spacing·비활성 70개

회귀 영역 X:
- DeathZone·Confiner·Wall LayerMask·Camera 영역 영역 X
- Token 비활성 70개 — 렉 해소 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:00:38 +09:00
깃 관리자 456151514b fix(BT12-Dev): 발판 점프 영역·스크롤 영역 영역·Token 50개 발판/경로 1개씩 (렉 해소)
PD 4 영역:
1. 렉 — Token 100 → 50개 활성 (50 비활성·렉 해소)
2. 발판 점프 도달 X — Y 0.5 → -3.0~-1.5 (점프 max Y -1.11 영역)
3. 스크롤 영역 영역 X — X -25~25 → -48~48 (영역 영역 영역)
4. Token 단순 패턴 — 발판 위 1개 + 경로 1개씩

근본 (MCP 자율 실측):
- Player 영역 위치 Y = -3.61 (GameObject top -4.12 + extents.y 0.51)
- jumpTakeOffSpeed=7·gravity=-9.81 → 점프 max height = 49/19.62 = 2.5 unit
- 점프 max Y = -3.61 + 2.5 = -1.11
- 직전 발판 Y -0.8 ~ 0.5 모두 점프 도달 X

fix:
1. 발판 20개 신규 (기존 8개 폐기)
   - Y 영역: -3.0·-2.5·-2.0·-1.5 (4 단계·점프 영역)
   - X 영역: -48 ~ 48 (스크롤 영역 영역)
   - 발판 영역 4 ~ 7 unit (Player horizontal jump 영역 < 7)
   - Type1·2·3 random·SpriteRenderer + BoxCollider2D + Static Rb·Layer 0
2. Token 100 → 50 활성 (50 비활성·렉 해소)
   - 발판 위 20개 (1개씩·발판.y + 0.6)
   - 경로 30개 (Y -3.4 jitter ±0.15·X -50 ~ 50 균일·Player 영역 영역)
3. 렉 해소: Token 50 비활성·Background·Ground reposition 영역 영역 영역

회귀 영역 X:
- DeathZone 4 비활성·Confiner disable·Wall LayerMask 정합
- Camera ortho 5·TargetOffset 2.2·Damping (1, 999, 1) 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:57:43 +09:00
깃 관리자 ff28ba786d feat(BT12-Dev): floating 발판 8개 배치 + Token 100개 재배치 + Camera offset+0.2·Damping.y 999
PD 3 영역:
1. floating_type1·2·3 발판 배치 (Type1 좁음·Type2 보통·Type3 넓음)
2. tokens Player 이동 가능 영역 재배치
3. Camera y+0.2·점프 시 Y 영역 영역

영역 (MCP 자율 실측·자성 #13):

1. 발판 배치 (8개·Layer 0·SpriteRenderer + BoxCollider2D + Static Rb)
   sprite bounds: type1=1.54×0.46·type2=2.28×0.44·type3=2.28×0.44
   Player jumpTakeOffSpeed=7·gravity=-9.81 → 점프 max 2.5 unit·Player Y -2 → max Y 0.5
   배치 (x, y):
   - T1_R1 (-3, -0.8)·T1_R2 (2, -0.5)·T1_R3 (16, 0.5)
   - T2_R1 (-8, 0.0)·T2_R2 (6, 0.2)·T2_R3 (-17, 0.5)
   - T3_R1 (-13, -0.3)·T3_R2 (11, -0.5)

2. Token 100개 재배치
   기존 분포: Token 다중 위치 (Sample Microgame 영역 영역)
   재배치: x ∈ [-25, 25] 균일·y ∈ [-1.5, 1.5] 5단계 (이동 가능 영역)
   PrefabUtility.RecordPrefabInstancePropertyModifications 정합

3. Cinemachine offset·Damping
   - TargetOffset.y 2.0 → 2.2 (+0.2)
   - Damping (1, 1, 1) → (1, 999, 1) — Y 영역 점프 시 Camera 영역 영역
   → Player jump 시 Camera Y 영역 X·X·Z 영역 추적

회귀 영역 X:
- DeathZone 4개 비활성·Wall LayerMask·Composite 정합
- Player·Enemy·InfiniteHorizontalGround·Background 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:52:21 +09:00
깃 관리자 53e4e2a627 fix(BT12-Dev): TargetOffset 2.7→2.0 + Confiner disable (가장자리 피해 정정)
PD: "이번엔 너무 높아졌어. 높이를 -0.7 해봐"
PD: "플레이어가 가장자리에 닿으면 피해를 입고 움직일 수 없게 되는 현상"

근본 (MCP 자율 실측):

1. TargetOffset.y 2.7 → 2.0 (-0.7)

2. 가장자리 영역 영역 — Cinemachine Confiner X cap
   - Confiner BoundingShape X 영역: -8.59 ~ 149.91
   - Camera X allowed (ortho 5·half 8.89): 0.30 ~ 141.03
   - Player x=0 → Camera X cap 0.30 stuck → Background·InfiniteHorizontalGround
     reposition X → 가장자리 영역 영역 영역 X → Player 영역 영역 영역 영역
   - fix: CinemachineConfiner2D enabled = false
     → Camera 무한 스크롤·Background·Ground reposition 정합·가장자리 영역 X

회귀 영역 X:
- Camera 영역 영역 영역·Player·Enemy 영역 영역 X
- InfiniteHorizontalBackground·InfiniteHorizontalGround Camera 따라 영역
- DeathZone 4개 비활성 (직전 7db47ca)·Wall LayerMask 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:48:16 +09:00
깃 관리자 7db47ca64c fix(BT12-Dev): DeathZone 4개 비활성 (보이지 않는 피해 영역 정정)
PD: "전진하다보면 보이지 않는 벽이 있는 것처럼 피해를 입는 지역"

근본 (MCP 자율 실측):
- DeathZone 4개 (Layer 0·BoxCollider2D·isTrigger=True·Platformer.Mechanics.DeathZone)
- DeathZone[2] bounds X 6.95~36.35·Y -12.54~**-2.54** ← Player y=-2 영역 영역
- DeathZone[4] bounds X -16.10~-8.02·Y -24.26~**2.86** ← Player y=-2 영역 영역
- Sample Microgame 떨어짐 영역 영역·Player 새 위치·새 지형 영역 영역 영역 X
- Player Y 영역 → DeathZone trigger → 피해/사망

fix: DeathZone 4개 SetActive(false)

회귀 영역 X:
- Wall LayerMask·Composite·GameObject·InfiniteHorizontalGround 영역 영역 X
- Token·CinemachineConfiner·Victory Trigger 영역 영역 X (영역 영역 영역 영역)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:46:12 +09:00
깃 관리자 0160907c78 fix(BT12-Dev): Cinemachine TargetOffset.y 1.7 → 2.7 (+1)
PD: "화면을 더 위로 보이게 바꿔줘. +1 추가해봐"

Camera Y 영역 (Player.y=-2 + 2.7) = 0.7·visible Y -4.3 ~ 5.7
Confiner Camera Y allowed top 4.21 영역 영역 X (0.7 < 4.21)·정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:44:26 +09:00
깃 관리자 cc829d9161 fix(BT12-Dev): Camera TargetOffset 1.7 + Player y=-2 + Enemy y=3.5
PD: "TargetOffset 0.2 정도 더 위로" → 1.5 → 1.7
PD: "Player 기본 y=-2·Enemy 기본 y=3.5"

근본 (MCP 자율 실측):
- Cinemachine TargetOffset.y 1.5 → 1.7 (하늘 0.2 unit 추가)
- Player.transform.position.y → -2 (PrefabUtility 정합)
- Enemy 16개 transform.position.y → 3.5 (PrefabUtility 정합·prefab override 저장)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:31:57 +09:00
깃 관리자 18fabcc8d3 fix(BT12-Dev): Cinemachine TargetOffset.y 0 → 1.5 (하늘 영역 영역)
PD: "카메라 위치를 좀 더 위로 올려서 하늘이 더 보이게 바꿔줘"

근본 (MCP 자율 실측):
- Cinemachine TargetOffset.y = 0 (직전 6b1730b·ortho 5.0 정합 PM 추정)
- Confiner BoundingShape Camera Y allowed top = 9.21 - 5 = 4.21 (Confiner pos.y -0.79·top point 10.00·ortho 5.0)
- TargetOffset.y = 1.5 → Camera Y = Player.y(0.5) + 1.5 = 2.0·visible Y -3.0 ~ 7.0
- Confiner cap 4.21 영역 영역 X (Camera Y 2.0 < 4.21)·하늘 영역 1.5 unit 추가 노출

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:24:08 +09:00
깃 관리자 c18562bf11 fix(BT12-Dev): MonsterRandomizer Animator 활성 + Enemy patrol 5~10 unit
PD: "이동·죽음·히트 애니메이션 재생 X → 잘 나오도록 수정"
PD: "맵 전체 patrol → 자신 주위 적절 범위 patrol"

근본 (MCP 자율 실측):

1. 애니메이션 — MonsterRandomizer.Awake line 28 `anim.enabled = false`
   - Animator 비활성 → AnimationController.SetFloat("velocityX", ...) 영향 X
   - Idle/Run/Hurt/Death state 영역 영역 X·sprite 수동 idle만
   - fix: anim.enabled=false 제거·sprite 수동 영역 폐기·Animator Clip 정합
   - Enemy.controller transition·parameter 정합 (직전 entry 7 fix 영역)

2. patrol 범위 — Enemy.prefab patrolMin=50·Max=75 (맵 전체)
   - Camera ortho 5.0·camWidth 17.78·주위 영역 영역 5~10 unit 정합
   - fix: patrolMin=5·Max=10 (Enemy.prefab 영역·Scene 16 instance 자동 반영)

회귀 영역 (Minor 사전 고지):
- 6종 random idle 영역 영역 영역 X — 모든 Enemy 동일 외형
- 6종 random visual 다양성 영역 후속 안건 (Sprite 동적 randomization·6 controller·SubStateMachine)·본 fix 영역 외

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:00:45 +09:00
깃 관리자 6b1730bd45 fix(BT12-Dev): Camera ortho 5.0 + Enemy PrefabUtility + patrol fallback + RangeTier
PD: "전혀 변화가 없어"·"적이 움직이지 않음"·"멀리서 보는 형태로 바꿔야"

근본 4종 (MCP 자율 실측·자성):

1. Camera 영역 (PD "멀리서") — Cinemachine Lens.OrthographicSize 3.5 → 5.0
   visible width 12.44 → 17.78·height 7 → 10
   TargetOffset.y 1.0 → 0 (ortho 증가 정합 PM 추정·PD 명시 X)

2. Enemy 위치 -3.62 적용 X (직전 230d755 적용 실패)
   - 원인: SetDirty만 호출·PrefabUtility.RecordPrefabInstancePropertyModifications 누락
   - prefab instance override 저장 X → Awake startY=-1.62 잔존
   - fix: PrefabUtility.RecordPrefabInstancePropertyModifications(transform)

3. Enemy patrol fallback (직전 9bc9ccb fix 미작동)
   - 원인: AutoForeground Tilemap 활성·groundTilemaps.Count=1
   - Count==0 fallback 영역 X·MeasureSafeWalkDistance line 199 startTm==null → return 0
   - fix: line 199 fallback 추가 — `if (startTm == null) return patrolMaxRange`

4. RangeTier mults 정정 (Camera ortho 영향)
   - camWidth 12.44 → 17.78 (1.43배)
   - mults 1/1.43 비례 축소: 0.2/0.5/0.667/1.0/1.5 → 0.14/0.35/0.467/0.7/1.05
   - maxRange 동등 유지 (A02 MediumLong 12.44 unit 정합)

회귀 영역 X:
- Camera height 10·Background height 10.25 정합
- Confiner Camera Y allowed -11.29~5.71 정합
- Enemy stuckThresholdTime·_phaseCooldown 영역 영역 X
- cliffCheck Layer 0 GameObject hit 정합

본 PM 자성:
- 직전 commit 230d755·9bc9ccb 적용 X 미실측 (자성 #15 패턴 재발)
- PrefabUtility 의무 미준수·fallback 조건 분기 미실측
- "PD 변화 X" 보고 시 즉시 MCP 실측 의무

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:47:29 +09:00
깃 관리자 9bc9ccb48e fix(BT12-Dev): Camera TargetOffset.y 1.62→1.0 + Enemy patrol Tilemap 부재 fallback
PD: "화면 하단이 좀 더 보여야할거 같아"
PD: "왜 적이 움직이지 않는거지? 적이 움직이게 해줘"

근본 (MCP 자율 실측):

1. Camera 하단
   - 직전 230d755 TargetOffset.y=1.62·visible -1.38 ~ 5.62 (Background top 정렬·하단 미노출)
   - 정정 TargetOffset.y=1.0·Camera Y=1.5·visible -2.0 ~ 5.0 (하단 1.0 unit 추가)

2. Enemy patrol 정지
   - EnemyController.MeasureSafeWalkDistance (line 146-223)
     groundTilemaps: Level 비활성 (48109f9)·AutoForeground 부재 → Count=0 → return 0
     → _maxRange=0 → SetNextPatrolTarget targetX = startX → 정지
   - fix: Tilemap 부재 fallback
     ```
     if (groundTilemaps.Count == 0) return patrolMaxRange;
     ```
     → _maxRange=75·Phase 0/2 startX ± min(50~75, 75) → 좌우 왕복

회귀 영역:
- cliffCheck Raycast Layer 0 (groundLayerMask (1<<0)|(1<<16))·GameObject Layer 0 hit 정합
- InfiniteHorizontalGround Camera 따라 reposition·Composite (53.12 unit) 영역 외 patrol 도달 시 항상 collide
- Cinemachine Confiner BoundingShape2D·Composer offset 영향 X
- Enemy IgnoreCollision Player·Layer 14↔13 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:34:00 +09:00
깃 관리자 230d7553e9 fix(BT12-Dev): Cinemachine TargetOffset.y 1.62 + Enemy 16개 위치 -3.62
PD: "맵 하단부에 카메라가 비쳐서 어색해. 카메라 영역 올려줘"
PD: "몬스터가 어색하게 튕겨오르고 있어"

근본 (MCP 자율 실측):

1. Camera 영역
   - Camera visible Y -3.00 ~ 4.00 (ortho 3.5)·Background bottom -4.62
   - 하단 -4.62 ~ -3.00 영역 카메라 안 보임
   - fix: Cinemachine TargetOffset.y 0 → 1.62 (Background top 정렬)
     → visible Y -1.38 ~ 5.62

2. Enemy 튕겨오름 (EnemyController.cs:343-357)
   - Enemy pos.y -0.13·_startY -0.13·fallThreshold 1.0
   - GameObject top -4.12 → Enemy gravity 영역 4.0 unit 낙하
   - 텔레포트 trigger Y = _startY - fallThreshold = -1.13
   - Enemy 영역 -1.13 영역 영역 → 시작 위치 (-0.13) 텔레포트 → 무한 반복 = 튕겨오름
   - fix: Enemy 16개 pos.y = -3.62 (capsule extents.y 0.503 실측·bottom -4.123 ≈ GameObject top -4.12)
     → _startY = -3.62·텔레포트 trigger Y = -4.62 (GameObject top 영역 영역 X)
     → Enemy GameObject 영역 정착·튕겨오름 해소

회귀 영역:
- Cinemachine Confiner BoundingShape2D 정합 (TargetOffset Camera offset·Confiner Camera 위치 별·영향 X)
- Enemy patrol _startX 변경 X·동일·groundTilemaps 영역 영역 별
- IgnoreCollision Player↔Enemy Awake/Update 자동 적용 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:52:45 +09:00
깃 관리자 2d8429dec5 fix(BT12-Dev): GameObject 정상화 (parent 분리·scale 1·box.size 정합)
PD: "몬스터도 플레이어와 동일하게 길처럼 동작하도록 수정해
(지금은 바닥에 닿으면 천천히 밀려남)"

본 PM MCP 자율 실측 자성:
- 직전 commit 832cc07 적용 후 PD Editor 수동 변경분 미실측 (자성 #15 패턴 재발)
- box.size (53.12, 1.0) → (53.12, 1.64)·offset (0,0) → (0, 0.71) 회귀
- parent=Background_BgImage1·localScale (100, 1, 1) 추가 변경 — 832cc07 영역 외

근본 원인 4종:
1. parent = Background_BgImage1 자식 (Background reposition 따라 위치 변동·이중 reposition)
2. localScale (100, 1, 1) — bounds 5312 unit (53.12 × 100)
3. box.size (53.12, 1.64)·offset (0, 0.71) — 832cc07 회귀
4. InfiniteHorizontalGround _colliderWidth=5312 → reposition 사실상 X
→ Enemy/Player KinematicObject Cast 영역 부정확·바닥 hit 시 밀려나는 현상

fix:
- parent = null (World root·Background 자식 분리)
- localScale (1, 1, 1)
- box.size (53.12, 1.0)·offset (0, 0)
- position (0, -4.62, 0) (Background 최하단 = pos.y(0.5) - height(10.25)/2)
- 자식 사본 (이전 부착) 정리·InfiniteHorizontalGround Start 영역 자동 재생성

회귀 영역:
- bounds Extents (26.56, 0.50)·정합
- Enemy AnimationController(KinematicObject)·Layer 14↔0 collide 정합
- Background reposition ↔ Ground reposition 독립 LateUpdate·Camera.x 동기

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:42:02 +09:00
깃 관리자 832cc07661 feat(BT12-Dev): InfiniteHorizontalGround 컴포넌트 신규 (PD 결정 (나)·Background 패턴)
PD: "Background 밑에 GameObject 배치·맵 최하단·맵에 맞게 사이즈 자동" → "(나) 형태로 진행해"

신규 컴포넌트 — Assets/Scripts/Background/InfiniteHorizontalGround.cs:
- InfiniteHorizontalBackground 동일 패턴·BoxCollider 영역 적용
- Start: BoxCollider size.x 측정 + 자식 사본 2개 (Left·Right) 자동 생성
  자식 BoxCollider는 부모 Static Rb attachedRigidbody 자동 상속
- LateUpdate: Camera.x 영역 BoxCollider 폭 정수 배수 root reposition

Scene 변경 — GameObject (Layer 0·Static Rb·직전 48109f9):
- pos (0.5,0,10) → (0, -4.62, 0)
  Background sprite 최하단 = pos.y(0.5) - height(10.25)/2 = -4.62
- BoxCollider size (1,1) → (53.12, 1.00)
  Background sprite width = 26.56 unit × lossyScale 2 (1.7×배경 추가 영역) = 53.12
- InfiniteHorizontalGround 부착

회귀 영역 X:
- KinematicObject Cast — 자식 BoxCollider + 부모 Static Rb 표준 정합
- Wall LayerMask (1<<0) Layer 0 정합
- Composite Level 비활성·Player·Enemy 1.7배·Background reposition Camera.x 동기

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:35:46 +09:00
깃 관리자 93856bc92a fix(BT12-Dev): Player·Enemy localScale × 1.7 + bgImage1 import 정정
PD: "배경 저화질·Player 1.7배·더 효율적 방법" → "C안으로 해"

C안 (Player·Enemy localScale × 1.7) 채택 근거:
- A (배경 1.7배): Player 화면 점유 16% 그대로·PD 의도 미충족
- B (Camera ortho × 1.7): RangeTier maxRange 영향·직전 사거리 fix 회귀
- C (Player·Enemy scale): Camera·RangeTier·배경 영향 없음·최소 변경

변경:
1. Player.prefab transform.localScale (1,1,1) → (1.7, 1.7, 1)
   - sprite bounds 0.66×1.10 → 1.12×1.88 (화면 점유 16% → 27%)
   - BoxCollider·SpriteRenderer 자동 비례 (transform 적용)
2. Enemy.prefab transform.localScale (1,1,1) → (1.7, 1.7, 1)
   - 활성 Enemy 16개 동일 비율 자동 반영
3. bgImage1 import 정정 (저화질 원인):
   - spriteImportMode Multiple → Single (자동 분할 제거)
   - textureCompression Compressed → Uncompressed (RGBA32 원본 화질)
4. Background_BgImage1 SpriteRenderer.sprite 재매핑 (Multiple→Single fileID 전환)

Camera ortho 3.5·RangeTier mults·Wall LayerMask·Composite·GameObject Static Rb
모두 영향 없음. KinematicObject minMoveDistance·shellRadius 절대값 정합.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:57:38 +09:00
깃 관리자 48109f9326 fix(BT12-Dev): GameObject Dynamic Rb→Static + Level 비활성 (PD 의도 정정)
PD: "Level을 안쓰고 GameObject 쓰려는 거야. 닿으면 플레이어가 하늘로
천천히 밀려나는 현상을 수정"

본 PM 자성 #15:
- 직전 commit b0ea32d Level SetActive(true)·Composite·Rb Static 적용은
  PD 의도와 불일치 — Level 영역 사용 X·GameObject 영역 사용
- PD 의도 가설 (Level=정상 지형) → 명시 확인 누락

근본 — MCP 자율 실측:
- GameObject (Layer 0): BoxCollider2D 200×0.5·**Rigidbody2D Dynamic**
- Player KinematicObject (Kinematic Rb) ↔ Dynamic Rb GameObject
  → Newton 3법칙 reaction force → Player 위로 밀려남

fix:
- Level SetActive(false) — PD 의도 정합
- GameObject Rb Dynamic → Static (simulated=true·sleepMode=NeverSleep)
  → Player KinematicObject Cast hit normal=(0,1) → IsGrounded true·velocity 보존

Wall LayerMask (1 << 0) 정합 — GameObject Static Collider Layer 0 hit 정합·
Level 비활성 영향 X.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:36:10 +09:00
깃 관리자 b0ea32d5ac fix(BT12-Dev): Level Tilemap Composite Collider + Static Rb (지형 밀려나는 현상 정정)
PD: "바닥에 플레이어가 닿으면 천천히 밀려나는 현상이 있어. 정상적인 지형처럼 보이도록 수정해줘"

근본 — MCP 자율 실측:
- Level Tilemap (Layer 0): TilemapCollider2D만·CompositeCollider2D NULL·Rb NULL
- Tile 9180개 (10종)·colliderType=Sprite — 각 Tile 별도 BoxCollider
- Tile 경계 hit normal=(±1,0) → Player KinematicObject (KinematicObject.cs:128-173)
  Cast hit normal.y < 0.65 → IsGrounded=false → velocity.x=0 (line 164) → 밀려나는 현상

fix — Composite Collider 표준 패턴:
- TilemapCollider2D.compositeOperation = Merge (Unity 6 — m_UsedByComposite 폐기)
- CompositeCollider2D 추가 (geometryType=Outlines·generationType=Synchronous)
- Rigidbody2D Static (simulated=true·sleepMode=NeverSleep)
- Level GameObject SetActive(true) — 영역 영역 영역 영역 정정
- 결과: Composite pointCount=682·pathCount=35·bounds Extents=(78,12.4)
  → Tile 경계 hit X·외곽선 normal=(0,1)만 → IsGrounded true·velocity.x 보존

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:31:31 +09:00
깃 관리자 2b8828bf37 fix(BT12-Dev): Wall OverlapPoint LayerMask Layer 16 → Layer 0 (회귀 정정)
PD: "왜 투사체가 또다시 벽을 뚫고 지나가는거지?" 회귀.

근본 — MCP 자율 실측 (자성 #13 정합):
- Wall = Level TilemapCollider2D (Layer 0·Default·isTrigger=False·Static)
- 직전 WallLayerMask = (1 << 16) → Layer 16 (Foreground) Tilemap 영역 영역 X
- Layer 0 영역 OverlapPoint hit X → SelfDestruct X → 벽 뚫고 지나감

fix — WallLayerMask = (1 << 0):
- Layer 0 Solid: Level Tilemap·GameObject·Alien BoxCollider2D = Wall 정합
- Trigger collider (CinemachineConfiner Polygon·Token·DeathZone Box)
  = useTriggers=false 자동 제외
- Player Layer=13·Enemy Layer=14 → OverlapPoint hit 무관·정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:22:10 +09:00
깃 관리자 1ef19890a5 feat(BT12-Dev): MonsterRandomizer 수동 idle animation (6×4 frames) + Projectile speed 12→6 (거리 차이 체감) 2026-05-10 17:50:28 +09:00
깃 관리자 dd6ab3f8f1 feat(BT12-Dev): MonsterRandomizer 6종 sprite + WallMask Layer 16 (Layer 0 Level Tilemap 영역 영역 거리 X 정정) 2026-05-10 17:40:06 +09:00
깃 관리자 72e033da5a fix(BT12-Dev): OverlapPoint useTriggers=false (CinemachineConfiner Trigger 영역 영역 → 즉시 SelfDestruct 영역) 2026-05-10 17:22:59 +09:00
깃 관리자 925d2bbbf3 fix(BT12-Dev): Enemy maxHearts 1 (1 hit kill·즉사 정합) 2026-05-10 17:08:30 +09:00
깃 관리자 e7e120feef feat(BT12-Dev): RangeTier 5단계 + aspect fallback (PD 사정거리 영역) 2026-05-10 16:56:20 +09:00
깃 관리자 6a160d5f5f fix(BT12-Dev): Wall OverlapPoint grace 0.05s + spawn OffsetDistance (회귀 정정) 2026-05-10 16:50:08 +09:00
깃 관리자 3f69cc04fe fix(BT12-Dev): PD #2 재발 정정 — Projectile.Update Physics2D.OverlapPoint Wall 탐지 (OnTriggerEnter2D 영역 Static collider 영역 발화 X)
근본 원인 (MCP 직접 진단):
- Wall = TilemapCollider2D (Layer 0 Level·Layer 16 AutoForeground)·isTrigger=false·Rigidbody2D 부재 (Static)
- Projectile = CircleCollider2D·isTrigger=true·Rigidbody2D 부재 (Static)
- Static (Trigger) ↔ Static (Solid) → OnTriggerEnter2D 발화 X (Unity 2D Physics 표준)
  → 직전 fix `Layer 0/16 isWall` 분기 영역 호출 X

해결:
- Projectile.Update 영역 매 frame Physics2D.OverlapPoint(transform.position, WallLayerMask) 영역 검출
- WallLayerMask = (1 << 0) | (1 << 16) — Layer 0 Default·Ground + Layer 16 Foreground·발판
- hit != null → SelfDestruct (영역 영역 영역 영역 영역 영역 정합)
- OnTriggerEnter2D 영역 isWall 분기 영역 영역 영역 (영역 영역 영역 영역 영역)

진단 Debug.Log 회수 (이전 추가분).

PD 보고 (2026-05-10): "벽에 닿은 투사체가 여전히 소멸하지 않아"

PD #1 (적이 죽지 않음) — 본 PM MCP 직접 검증 결과:
- Enemy maxHP 20·damage 5·4hit kill 영역 영역
- Schedule<EnemyDeath> 영역 호출 영역 영역 — Execute 영역 호출 영역 정합 (직접 검증)
- → Editor 영역 영역 영역 영역 영역 영역 영역 X (runInBackground·Game window) — PD 영역 직접 Play 영역 검증 영역 영역
2026-05-10 16:46:04 +09:00
깃 관리자 5cb6040c8a feat(BT12-Dev): PD 4 지시 — Projectile 거리 제한·벽 충돌·특성 가시화·Icon UI 매핑 (MCP 자율)
PD 지시 (2026-05-10):
1. 투사체 종류 영역 일정 거리 영역 소멸 (Camera width × 1.5)
2. 레이저 외 투사체 영역 벽 충돌 시 소멸
3. 스킬 특성 영역 컨셉 동작
4. 스킬 선택 UI 영역 아이콘 노출

본 PM MCP 자율 진행:

==== PD #1: 거리 제한 ====
Projectile.Initialize:
- _spawnPosition 저장
- _maxRange = Camera.orthographicSize × 2 × aspect × 1.5 (가로 × 1.5)
Projectile.Update:
- Distance(transform.position, _spawnPosition) >= _maxRange → SelfDestruct

==== PD #2: 벽 충돌 ====
Projectile.OnTriggerEnter2D:
- isEnemy 처리 → hit 후 SelfDestruct·return
- Layer 0 (Default·Ground) || Layer 16 (Foreground·발판) → SelfDestruct
- 본 Projectile 영역 = A 카테고리 (레이저 영역 영역 X) — 모든 영역 SelfDestruct 정합

==== PD #3: 특성 가시화 ====
StatusApplier·EnemyStateComponents 영역 — DoT·Stun·Slow·Knockback·DebuffStack 영역 영역 정합 영역.
근본 영역 — Enemy hp 4·damage 5·1hit 즉사 → 효과 시각 X.
정정 — Enemy.prefab maxHearts 1→5 (maxHP 4→20) — A02 DoT·A03 Stun·A14 Slow 영역 4 hit 영역 영역 영역.

==== PD #4: Icon UI ====
SkillCardSlot _icon 매핑 X 영역 — BannerFrame04_Divided 자식 영역 SkillIcon GameObject 신규 추가 + Image 컴포넌트
- anchorMin·max (0.5, 0.7)·sizeDelta (120, 120)·preserveAspect true
- 3 슬롯 영역 _icon 필드 매핑 정합

Scene SkillSelectionCanvas·Enemy 인스턴스 RevertPrefabInstance — prefab 변경 동기화

MCP Play 검증:
- enemyMaxHP 20 ·컴파일 에러 0 ·Icon 매핑 3/3 
2026-05-10 16:23:34 +09:00
깃 관리자 a6e168e86b fix(BT12-Dev): 무한 배경 컴포넌트 InfiniteHorizontalBackground — sprite 재활용 reposition 패턴 (PD 지적 정정)
PD 지적 (2026-05-10):
- "단순히 키운거라서 비효율적 — 리소스를 재활용할 수 있는 기능 구현"

본 PM 자성 — 직전 Tiled DrawMode size (500, 7) 영역 단순 영역 영역 메모리·렌더 영역 비효율. 영역 영역 — Camera 영역 영역 영역 sprite 영역 reposition 패턴 (재활용·효율).

신규 컴포넌트 InfiniteHorizontalBackground.cs:
- Start — sprite 가로 폭 측정 + 자식 사본 2개 (Left·Right) 영역 영역 영역 영역
  → 화면 영역 영역 영역 3 sprite (root + Left + Right) 영역 충분 (sprite > Camera width 정합)
- LateUpdate — Camera 영역 영역 영역 영역 sprite 폭 영역 영역 영역 → root 영역 정수 배수 reposition
  → 자식 사본 영역 영역 영역 영역 따라가 영역 영역 영역 영역 영역 영역
- 효율 — sprite 1개 (Resources 1회·Texture 메모리 재사용)·GameObject 3개

Background_BgImage1 정정:
- DrawMode Tiled → Simple (sprite default size·재활용 패턴 정합)
- Scale (1.77, 1.77, 1) — Camera height fit
- Position (0, 0.5, 10) — World root
- InfiniteHorizontalBackground 컴포넌트 부착

MCP Play 검증:
- SendMessage("LateUpdate") → bgPos 0 → 188.04 reposition 정합
- Camera 150 → bgChild0 (94.02)·bgChild1 (282.07) — Camera 영역 영역 sprite 3 영역 정합
2026-05-10 16:03:55 +09:00
깃 관리자 4855811a41 feat(BT12-Dev): 스킬 6 아이콘 매핑 + 배경 Tiled World 영역 (PD 2 지시·MCP 자율)
PD 지시 (2026-05-10):
1. Layer Lab Icon_PictoIcons 영역 — 6 스킬 영역 어울릴 아이콘 임의 판단·적용
2. 배경 영역 화면 스크롤 자연스러움·반복 영역

본 PM MCP 자율 진행:

==== Part 1: 스킬 6 Icon 매핑 ====
Icon_PictoIcons/256/ 영역 매핑 (어울림·문맥 정합 임의 판단):
- A01 마법 화살      → PictoIcon_Magic       (마법 영역)
- A02 파이어볼       → PictoIcon_Fire        (화염)
- A03 봉인 마법      → PictoIcon_Magic_Ball  (마법 구체·봉인)
- A08 저주의 화살    → PictoIcon_Skull       (저주·해골)
- A14 얼음 창        → PictoIcon_Crystal     (얼음 결정)
- A15 추적 화염구    → PictoIcon_Firework    (추적 화염)

execute_code 영역 — SerializedObject Icon 필드 영역 sprite reference 적용.

==== Part 2: 배경 Tiled World fix ====
Background_BgImage1:
- Camera 자식 영역 → World root 영역 영역 (Player 영역 영역 영역 자연 스크롤)
- Position (0, 0.5, 10)
- DrawMode = Tiled·tileMode = Continuous
- Size (500, 7) — 가로 500 unit·세로 Camera 영역 영역 7 unit 영역
- TextureImporter Mesh Type = FullRect·Wrap Mode = Repeat (Tiled 정합)

MCP Play 검증:
- bgVisible: true 
- bgDrawMode: Tiled 
- Player·Enemy 영역 영역 영역 → 자동 발사 영역 SkillSelectionUI 영역 정합
2026-05-10 15:54:23 +09:00
깃 관리자 f505d47728 feat(BT12-Dev): bgImage1 배경 이미지 추가 (PD 지시·MCP 자율)
PD 지시 (2026-05-10):
- "Assets\Tiles\ 경로에 있는 bgImage1 이미지를 배경으로 보이게 추가해줘"

본 PM MCP 자율 진행:
1. Glob — Assets/Tiles/bgImage1.png 발견 (2048×395·sprite 정합)
2. execute_code — Scene 영역 Background_BgImage1 GameObject 생성·SpriteRenderer 부착
3. Main Camera 자식 영역 영역 — Camera Follow Player 정합·화면 영역 고정
4. local position (0, 0, 10) — Camera z=-9 영역 영역 19 unit 영역
5. local scale (1.77, 1.77, 1.0) — Camera ortho size 3.5 (height 7) / sprite height 3.95 정합
6. sortingLayer Default·sortingOrder -100 — 모든 영역 뒤
7. git add bgImage1.png + meta (untracked 영역 정정)

MCP Play 검증:
- bgPath: Main Camera/Background_BgImage1 
- spriteVisible: true 
- spriteName: bgImage1_0 
2026-05-10 15:47:17 +09:00
깃 관리자 62c8c93e6e feat(BT12-Dev): 스킬 선택 UI Layer Lab BannerFrame04_Divided 적용 (가로형 Magicka 스타일·옵션 C)
PD 결정 (2026-05-10): 옵션 A 즉시 적용 + 가로형 화면 (Magicka 스타일)
실제 적용: 옵션 C — Layer Lab 전체 nested (103 obj·Editor freeze) 회피·BannerFrame04_Divided × 3 직접 추가

본 PM MCP 자율 진행:
1. SkillSelectionCanvas 영역 자식 (SkillSelectionPanel) 제거 → Layer Lab 적용 준비
2. Layer Lab Play_UI_ChoiceSkill nested Instantiate 시도 → Editor freeze (last_heartbeat 정지·103 obj 영역)
3. Editor 강제 종료 (taskkill PID 25912) + PD 재시작 + instance 재연결
4. 옵션 C 적용 — execute_code 영역 직접 구성:
   - SkillSelectionPanel (Image·dim 0.78 alpha·anchor stretch)
   - TitleText (TextMeshPro "기술 선택"·중앙 상단·금색)
   - CardArea (HorizontalLayoutGroup·1500x600·spacing 30·MiddleCenter)
   - SkillCardSlot1·2·3 (Layer Lab BannerFrame04_Divided nested prefab)
5. 각 카드 영역 SkillCardSlot 컴포넌트 부착·Button 부착·필드 매핑:
   - _nameText → BannerFrame04_Divided/Text_Title
   - _descriptionText → BannerFrame04_Divided/Text_Info
   - _topBanner·_highlightFrame → BannerFrame04_Divided/Border
   - _clickArea → 카드 자체 Button (targetGraphic = Bg/Image)
6. SkillSelectionUI _rootPanel·_titleText·_slot1·2·3 매핑
7. Scene 영역 SkillSelectionCanvas instance RevertPrefabInstance 강제 동기화 (Awake _rootPanel=NULL → SkillSelectionPanel 정합)
8. SkillSelectionUI.cs OnCardSelected 정정 — 카드 클릭 → 즉시 _onConfirm.Invoke (Magicka 스타일·Confirm 버튼 부재)

MCP Play 검증:
- [SkillSelectionUI] Awake _rootPanel=SkillSelectionPanel 
- [ExperienceSystem] OnEnemyKilled → GainXP +1 → LEVEL UP Lv.2 
- [LevelUpManager] cards.Count=3 → SkillSelectionCanvas 활성 
- [SkillSelectionUI] Show cards=3 level=2 
2026-05-10 15:35:52 +09:00
깃 관리자 af6ac1652c chore(BT12-Dev-Death): Health.cs 진단 Debug.Log 3줄 회수 — 사망 원인 확정 후 회수 의무 정합
회수 영역:
- Decrement(damage) line 132 — Debug.Log + StackTrace 1줄
- DecrementSilent(damage) line 205 — Debug.Log 1줄
- Die() line 257 — Debug.Log + StackTrace 1줄

진단 도구 회수 누적: Projectile 8 + AttackHitbox 1 + EnemyDeath 1 + Health 3 = 13줄 전수 회수.

PD 정합 (2026-05-10): "이제 정상적으로 적이 죽는거 같아."
2026-05-10 01:31:58 +09:00
깃 관리자 6a825fc9b7 fix(BT12-Dev): 투사체 damage 5 하한 + Schedule<EnemyDeath> 추가 — 적 처치·경험치·레벨업 정합
PD 지시 (2026-05-10):
- "여전히 내 투사체에 적이 죽지 않고, 경험치를 제공하지 않아"
- "혹시 투사체 공격력이 없어서 그렇다면 기본 공격력을 5로 고정해(임시)"
- "적이 죽으면 죽는 모션과 함께 소멸되어야 해"
- "적이 죽으면 경험치를 제공해야 하고, 레벨업이 가능해야 해"

본 PM MCP 자율 진단:
- Console 영역 [Health@Enemy] Decrement(damage=4) hp 4→0 정합
- 그러나 [ExperienceSystem] X·[PlayerProgression] X·[EnemyDeath] X
- → Projectile.cs 영역 Schedule<EnemyDeath> 호출 누락 확정

근본 fix 2종:
1. damage 5 하한 강제 (임시·PD 지시) — `int damage = Mathf.Max(_runtime.CalculateEffectiveDamage(), 5);`
   → balance-designer 정식 수치 영역 임시 영역
2. Schedule<EnemyDeath> 추가 (근본·AttackHitbox.cs:70~76 패턴 정합)
   → Enemy hp 0 도달 시 EnemyDeath 체인 발동 → ExperienceSystem.OnEnemyKilled → 경험치·레벨업

검증 (MCP Play):
- damage=5 hp 4→0 (1hit kill) 
- ExperienceSystem.OnEnemyKilled → GainXP +1 
- PlayerProgression Lv.1→2→3→4 
- SkillSelectionUI Show + 카드 확정 (파이어볼·추적 화염구) 

PD 지시 3가지 전부 정합.
2026-05-10 01:25:12 +09:00