fix(BT12-Dev): HealthIsZero sender 가드 — Enemy 사망 시 Player 즉사 버그 근본 해결
근본 원인: - Health.Decrement·Die 4곳에서 Schedule<HealthIsZero>() (sender 미구분) 발화 - HealthIsZero.Execute가 health 영역 검증 없이 무조건 Schedule<PlayerDeath>() - 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 즉시 적용.
This commit is contained in:
parent
e31c34cf24
commit
b37b4a660b
|
|
@ -7,6 +7,8 @@ namespace Platformer.Gameplay
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 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.
|
/// PlayerDeath event.
|
||||||
|
/// BT12-Dev 2026-05-09 — sender 가드 추가. Enemy.Health hp=0 시 무차별 PlayerDeath 발화 차단.
|
||||||
|
/// 근본: Health.Decrement·Die 4곳에서 Schedule<HealthIsZero>(sender 미구분) → Execute에서 PlayerDeath 직결 → 적 처치 시 Player 즉사 버그.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="HealthIsZero"></typeparam>
|
/// <typeparam name="HealthIsZero"></typeparam>
|
||||||
public class HealthIsZero : Simulation.Event<HealthIsZero>
|
public class HealthIsZero : Simulation.Event<HealthIsZero>
|
||||||
|
|
@ -15,6 +17,9 @@ namespace Platformer.Gameplay
|
||||||
|
|
||||||
public override void Execute()
|
public override void Execute()
|
||||||
{
|
{
|
||||||
|
if (health == null) return;
|
||||||
|
// PlayerController 보유 Health만 PlayerDeath 발화 (Enemy 등 다른 Health 영역 차단).
|
||||||
|
if (health.GetComponent<PlayerController>() == null) return;
|
||||||
Schedule<PlayerDeath>();
|
Schedule<PlayerDeath>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue