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>
This commit is contained in:
깃 관리자 2026-05-12 11:24:42 +09:00
parent adcb1ac1b1
commit ddc0e250e5
1 changed files with 20 additions and 1 deletions

View File

@ -373,8 +373,27 @@ namespace Platformer.Mechanics
if (control != null) control.move.x = 0f;
}
// BT12-Dev 2026-05-11 — 밟기 공격 폐기 (PD 지시): Player ↔ Enemy 충돌 검출·PlayerEnemyCollision 발화 제거.
// BT12-Dev 2026-05-11 — 밟기 공격 폐기 (PD 지시): PlayerEnemyCollision 발화 제거.
// Player ↔ Enemy IgnoreCollision은 Awake 시점에 이미 적용되어 물리 통과 정합.
//
// PD 지시 2026-05-11 — Player ↔ Enemy 닿음 시 Player 피해 (밟기는 X·통과).
// Player IsGrounded 상태에서만 피격·공중(점프) 상태는 통과.
if (_cachedPlayer == null)
{
var pgo = GameObject.FindGameObjectWithTag("Player");
if (pgo != null) _cachedPlayer = pgo.GetComponent<PlayerController>();
if (_cachedPlayer == null) _cachedPlayer = Object.FindFirstObjectByType<PlayerController>();
}
if (_cachedPlayer != null && _cachedPlayer.health != null && _cachedPlayer.health.IsAlive)
{
if (_cachedPlayer.IsGrounded && VisualBounds.Intersects(_cachedPlayer.Bounds))
{
if (!_cachedPlayer.health.IsInvulnerable)
{
_cachedPlayer.health.Decrement();
}
}
}
}
void OnDrawGizmos()