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;