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