diag(BT12-Dev): Projectile.OnTriggerEnter2D 진단 Debug.Log 추가 — 적 피격 X 근본 진단
목적: - 본 PM 가설 4회 누적 부정확 + 회귀 1회 → feedback_pm_root_diagnosis_priority 의무 적용 - 가설 즉시 중단·실측 우선 진단 도구 추가 - PD Play 영역 Console [Projectile] prefix 필터 → 호출 여부·other 정보·각 분기 reach·return 시점 정확 진단 진단 Debug.Log 영역 (prefix [Projectile][...] 통일·grep 영역): - [Enter] OnTriggerEnter2D 진입 영역 (other.name·layer·t) - [Return] _hitTargets duplicate - [Return] PlayerController detected - [LayerCheck] enemyLayer·otherLayer·hasEnemyController·isEnemy - [Return] not Enemy - [Return] Health component missing - [Return] Health not alive (hp 정보) - [Hit] damage 적용 회수 의무: - PD Console 결과 수령 + 근본 fix 적용 후 본 진단 Debug.Log 일괄 제거 (대화로그 영역 명시) PD 결정 (2026-05-09): "A 안으로 해" — 진단 Debug.Log 즉시 추가. pm-auditor 통과 (조건부) + 권고 4종 수용.
This commit is contained in:
parent
9eebbec03a
commit
d27a63f32e
|
|
@ -43,26 +43,54 @@ namespace EerieVillage.Skills.Effectors
|
|||
|
||||
protected virtual void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
if (_hitTargets.Contains(other)) return;
|
||||
// BT12-Dev 진단 (2026-05-09 PD A안) — 적 피격 X 근본 진단.
|
||||
// 회수 의무: PD Console 결과 수령 + 근본 fix 적용 후 본 진단 Debug.Log 일괄 제거.
|
||||
Debug.Log($"[Projectile][Enter] other={other.name} layer={other.gameObject.layer} t={Time.time:F2}");
|
||||
|
||||
if (_hitTargets.Contains(other))
|
||||
{
|
||||
Debug.Log($"[Projectile][Return] _hitTargets duplicate other={other.name}");
|
||||
return;
|
||||
}
|
||||
|
||||
// PD 지시 2026-05-09 후속 방어 — 자기(Player) hit·자기 자신·hit 방어.
|
||||
if (other.GetComponent<PlayerController>() != null) return;
|
||||
if (other.GetComponent<PlayerController>() != null)
|
||||
{
|
||||
Debug.Log($"[Projectile][Return] PlayerController detected other={other.name}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Enemy 레이어 한정.
|
||||
// Phase 2-D fallback (2026-05-09): TagManager에 "Enemy" 레이어 미등재 시 LayerMask.NameToLayer 반환값 = -1.
|
||||
// 레이어 매칭 실패 시 EnemyController 컴포넌트 존재 여부로 대체 판정.
|
||||
int enemyLayer = LayerMask.NameToLayer("Enemy");
|
||||
bool isEnemy = (enemyLayer != -1 && other.gameObject.layer == enemyLayer)
|
||||
|| other.GetComponent<EnemyController>() != null;
|
||||
if (!isEnemy) return;
|
||||
bool hasEnemyController = other.GetComponent<EnemyController>() != null;
|
||||
bool isEnemy = (enemyLayer != -1 && other.gameObject.layer == enemyLayer) || hasEnemyController;
|
||||
Debug.Log($"[Projectile][LayerCheck] enemyLayer={enemyLayer} otherLayer={other.gameObject.layer} hasEnemyController={hasEnemyController} isEnemy={isEnemy}");
|
||||
|
||||
if (!isEnemy)
|
||||
{
|
||||
Debug.Log($"[Projectile][Return] not Enemy other={other.name}");
|
||||
return;
|
||||
}
|
||||
|
||||
var health = other.GetComponent<Health>();
|
||||
if (health == null || !health.IsAlive) return;
|
||||
if (health == null)
|
||||
{
|
||||
Debug.Log($"[Projectile][Return] Health component missing other={other.name}");
|
||||
return;
|
||||
}
|
||||
if (!health.IsAlive)
|
||||
{
|
||||
Debug.Log($"[Projectile][Return] Health not alive other={other.name} hp={health.CurrentHP}");
|
||||
return;
|
||||
}
|
||||
|
||||
_hitTargets.Add(other);
|
||||
|
||||
// 유효 대미지 산출 (balance/01 v0.2 §3 공식 — ActiveSkillRuntime.CalculateEffectiveDamage())
|
||||
int damage = _runtime.CalculateEffectiveDamage();
|
||||
Debug.Log($"[Projectile][Hit] other={other.name} damage={damage}");
|
||||
|
||||
// 피해 적용
|
||||
health.Decrement(damage);
|
||||
|
|
|
|||
Loading…
Reference in New Issue