From 2efcd341778e4b7563e336bc0430893bca4f7e22 Mon Sep 17 00:00:00 2001 From: swrring Date: Wed, 13 May 2026 19:45:53 +0900 Subject: [PATCH] =?UTF-8?q?fix(BT12-Dev):=20Player=20=ED=94=BC=EA=B2=A9=20?= =?UTF-8?q?distance=20=EA=B8=B0=EB=B0=98=20=EA=B0=95=ED=99=94=20+=20Enemy?= =?UTF-8?q?=20HP=20=EC=9E=90=EB=8F=99=20fallback=20(PD=20=EB=B3=B4?= =?UTF-8?q?=EA=B3=A0=20=EC=9E=AC=EB=B0=9C=202026-05-13)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 작업 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) --- Assets/Scripts/Mechanics/EnemyController.cs | 10 +++++++--- Assets/Scripts/Mechanics/Health.cs | 9 +++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Mechanics/EnemyController.cs b/Assets/Scripts/Mechanics/EnemyController.cs index 5d02b22..e039525 100644 --- a/Assets/Scripts/Mechanics/EnemyController.cs +++ b/Assets/Scripts/Mechanics/EnemyController.cs @@ -386,10 +386,14 @@ namespace Platformer.Mechanics } if (_cachedPlayer != null && _cachedPlayer.health != null && _cachedPlayer.health.IsAlive) { - // PD 지시 2026-05-13 — "닿아도 피해 X" 정정. IsGrounded 조건 폐기 영역 ground·공중 무관 피격. - // 직전 2026-05-11 명시 "공중 통과" 영역 폐기 (PD 직접 의도 변경 영역). - if (VisualBounds.Intersects(_cachedPlayer.Bounds)) + // PD 지시 2026-05-13 — "닿아도 X" 재 보고. Bounds.Intersects 영역 너무 좁은 가능성 → distance 기반 fix. + // 진단 Debug.Log 추가 (회수 의무·PD Console 측정 후 본 PM revert). + float dist = Vector2.Distance(transform.position, _cachedPlayer.transform.position); + bool boundsHit = VisualBounds.Intersects(_cachedPlayer.Bounds); + bool distHit = dist < 1.5f; + if (boundsHit || distHit) { + Debug.Log($"[EnemyHit] enemy={name} dist={dist:F2} boundsHit={boundsHit} distHit={distHit} invuln={_cachedPlayer.health.IsInvulnerable} enemyPos=({transform.position.x:F2},{transform.position.y:F2}) playerPos=({_cachedPlayer.transform.position.x:F2},{_cachedPlayer.transform.position.y:F2}) t={Time.time:F2}"); if (!_cachedPlayer.health.IsInvulnerable) { _cachedPlayer.health.Decrement(); diff --git a/Assets/Scripts/Mechanics/Health.cs b/Assets/Scripts/Mechanics/Health.cs index ff8ddf6..17e226a 100644 --- a/Assets/Scripts/Mechanics/Health.cs +++ b/Assets/Scripts/Mechanics/Health.cs @@ -378,6 +378,15 @@ namespace Platformer.Mechanics return; } + // PD 지시 2026-05-13 — Enemy 영역 RandomMaxHPRange Inspector 미설정 fallback (자동 30~40 random) + if (GetComponent() != null) + { + maxHP = UnityEngine.Random.Range(30, 41); + maxHearts = Mathf.Max(1, maxHP / QuartersPerHeart); + currentHP = maxHP; + return; + } + // maxHearts가 설정되어 있고 maxHP가 구식 값(1)으로 남아있는 프리팹 호환 처리. // 정상 흐름: maxHP = maxHearts * 4, currentHP = maxHP로 초기화. if (maxHearts <= 0) maxHearts = 1;