From b37b4a660b7113a5c4d81ea0d5e1c3f26dd27380 Mon Sep 17 00:00:00 2001 From: swrring Date: Sat, 9 May 2026 21:41:12 +0900 Subject: [PATCH] =?UTF-8?q?fix(BT12-Dev):=20HealthIsZero=20sender=20?= =?UTF-8?q?=EA=B0=80=EB=93=9C=20=E2=80=94=20Enemy=20=EC=82=AC=EB=A7=9D=20?= =?UTF-8?q?=EC=8B=9C=20Player=20=EC=A6=89=EC=82=AC=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EA=B7=BC=EB=B3=B8=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 근본 원인: - Health.Decrement·Die 4곳에서 Schedule() (sender 미구분) 발화 - HealthIsZero.Execute가 health 영역 검증 없이 무조건 Schedule() - BT12-Dev Phase 2-B 투사체가 사상 처음 Enemy.Health.Decrement 호출 → Enemy의 HealthIsZero가 처음 발화 → 무차별 PlayerDeath 직결 노출 해결: - HealthIsZero.Execute에 PlayerController 보유 Health 검증 가드 추가 - PlayerController 보유 Health만 PlayerDeath 발화 (1줄 fix·근본) 검증: - PD Console StackTrace t=5.18 Enemy hp=0 → t=5.19 Player Die() 1ms 직결 패턴 종결 의도 PD 지시 (2026-05-09): 1 즉시 적용. --- Assets/Scripts/Gameplay/HealthIsZero.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Gameplay/HealthIsZero.cs b/Assets/Scripts/Gameplay/HealthIsZero.cs index 0eba940..8f53e55 100644 --- a/Assets/Scripts/Gameplay/HealthIsZero.cs +++ b/Assets/Scripts/Gameplay/HealthIsZero.cs @@ -5,8 +5,10 @@ using static Platformer.Core.Simulation; namespace Platformer.Gameplay { /// - /// Fired when the player health reaches 0. This usually would result in a + /// Fired when the player health reaches 0. This usually would result in a /// PlayerDeath event. + /// BT12-Dev 2026-05-09 — sender 가드 추가. Enemy.Health hp=0 시 무차별 PlayerDeath 발화 차단. + /// 근본: Health.Decrement·Die 4곳에서 Schedule(sender 미구분) → Execute에서 PlayerDeath 직결 → 적 처치 시 Player 즉사 버그. /// /// public class HealthIsZero : Simulation.Event @@ -15,6 +17,9 @@ namespace Platformer.Gameplay public override void Execute() { + if (health == null) return; + // PlayerController 보유 Health만 PlayerDeath 발화 (Enemy 등 다른 Health 영역 차단). + if (health.GetComponent() == null) return; Schedule(); } }