From d27a63f32ed739338ba79eeff2819f28410a3d36 Mon Sep 17 00:00:00 2001 From: swrring Date: Sat, 9 May 2026 23:46:05 +0900 Subject: [PATCH] =?UTF-8?q?diag(BT12-Dev):=20Projectile.OnTriggerEnter2D?= =?UTF-8?q?=20=EC=A7=84=EB=8B=A8=20Debug.Log=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=E2=80=94=20=EC=A0=81=20=ED=94=BC=EA=B2=A9=20X=20=EA=B7=BC?= =?UTF-8?q?=EB=B3=B8=20=EC=A7=84=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 목적: - 본 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종 수용. --- Assets/Scripts/Skills/Effectors/Projectile.cs | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Skills/Effectors/Projectile.cs b/Assets/Scripts/Skills/Effectors/Projectile.cs index bc0ef54..e27893b 100644 --- a/Assets/Scripts/Skills/Effectors/Projectile.cs +++ b/Assets/Scripts/Skills/Effectors/Projectile.cs @@ -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() != null) return; + if (other.GetComponent() != 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() != null; - if (!isEnemy) return; + bool hasEnemyController = other.GetComponent() != 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(); - 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);