diff --git a/Assets/Scripts/Mechanics/EnemyController.cs b/Assets/Scripts/Mechanics/EnemyController.cs index 6a8e573..5d02b22 100644 --- a/Assets/Scripts/Mechanics/EnemyController.cs +++ b/Assets/Scripts/Mechanics/EnemyController.cs @@ -386,17 +386,12 @@ namespace Platformer.Mechanics } if (_cachedPlayer != null && _cachedPlayer.health != null && _cachedPlayer.health.IsAlive) { - // PD 지시 2026-05-13 — Player 피격 X 원인 진단 (회수 의무·PD Console 측정 후 본 PM revert) - bool intersects = VisualBounds.Intersects(_cachedPlayer.Bounds); - if (intersects) - { - Debug.Log($"[EnemyHit][Intersect] enemy={name} playerGrounded={_cachedPlayer.IsGrounded} playerInvuln={_cachedPlayer.health.IsInvulnerable} enemyVB=({VisualBounds.center.x:F2},{VisualBounds.center.y:F2},sz={VisualBounds.size.x:F2}x{VisualBounds.size.y:F2}) playerB=({_cachedPlayer.Bounds.center.x:F2},{_cachedPlayer.Bounds.center.y:F2},sz={_cachedPlayer.Bounds.size.x:F2}x{_cachedPlayer.Bounds.size.y:F2}) t={Time.time:F2}"); - } - if (_cachedPlayer.IsGrounded && intersects) + // PD 지시 2026-05-13 — "닿아도 피해 X" 정정. IsGrounded 조건 폐기 영역 ground·공중 무관 피격. + // 직전 2026-05-11 명시 "공중 통과" 영역 폐기 (PD 직접 의도 변경 영역). + if (VisualBounds.Intersects(_cachedPlayer.Bounds)) { if (!_cachedPlayer.health.IsInvulnerable) { - Debug.Log($"[EnemyHit][Decrement] enemy={name} t={Time.time:F2}"); _cachedPlayer.health.Decrement(); } } diff --git a/Assets/Scripts/Mechanics/Health.cs b/Assets/Scripts/Mechanics/Health.cs index 9b51ed0..ff8ddf6 100644 --- a/Assets/Scripts/Mechanics/Health.cs +++ b/Assets/Scripts/Mechanics/Health.cs @@ -35,6 +35,10 @@ namespace Platformer.Mechanics [Tooltip("초기 보유 하트 수. 하트 1개 = 4 HP.")] public int maxHearts = 1; + // PD 지시 2026-05-13 — Enemy HP 30~40 random (x·y > 0 시 활성·Awake 영역 maxHP 직접 random·maxHearts 자동 산정) + [Tooltip("0이 아닐 시 random 범위 (min·max inclusive) — Awake 영역 maxHP 영역 random 설정·maxHearts 자동 산정")] + public Vector2Int RandomMaxHPRange = Vector2Int.zero; + /// /// 산정된 최대 HP(쿼터 단위). 직접 설정 대신 를 통해 조정한다 (시리얼라이즈 호환 유지). /// BT7-Plan 이전에는 1로 고정되어 있었으나, 현재 PD 지시로 하트 분할 시스템 전환. @@ -365,6 +369,15 @@ namespace Platformer.Mechanics void Awake() { + // PD 지시 2026-05-13 — RandomMaxHPRange 활성 시 maxHP random 우선 + if (RandomMaxHPRange.x > 0 && RandomMaxHPRange.y >= RandomMaxHPRange.x) + { + maxHP = UnityEngine.Random.Range(RandomMaxHPRange.x, RandomMaxHPRange.y + 1); + maxHearts = Mathf.Max(1, maxHP / QuartersPerHeart); + currentHP = maxHP; + return; + } + // maxHearts가 설정되어 있고 maxHP가 구식 값(1)으로 남아있는 프리팹 호환 처리. // 정상 흐름: maxHP = maxHearts * 4, currentHP = maxHP로 초기화. if (maxHearts <= 0) maxHearts = 1;