From 4c00378d7845f2bc83b22cec56ef4ea9081362d2 Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 14 May 2026 22:06:15 +0900 Subject: [PATCH] =?UTF-8?q?feat(BT12-Dev):=20=EB=B0=95=EC=8A=A4=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=81=ED=99=94=20ON=20+=20=EB=A7=B5=20=EA=B2=BD?= =?UTF-8?q?=EA=B3=84=20=EB=A9=88=EC=B6=A4=20=EC=A7=84=EB=8B=A8=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20(PD=20=EC=A7=80=EC=8B=9C=202026-05-14)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 보고 2건: 1. "투사체 판정 범위를 다시 보여줘" 2. "파이어볼이나 저주의 화살과 같은 투사체 형태는 여전히 맵이 연결되는 경계선을 넘지 못하고 제자리에서 멈추다가 소멸하고 있어. (단, 속도가 느린 투사체는 정상적으로 날아감)" 정정: 1. HitboxDebug.ShowDebugVisuals false → true - Range_Debug (파란 박스)·ProjectileHitbox_Debug (붉은 박스)· LaserHitbox_Debug·MeleeHitbox_Debug·Hitbox_Debug 일괄 노출. - SpriteRenderer.enabled toggle 만 — GameObject·LiveHitboxSync 부착 정상. 2. Projectile.OnTriggerEnter2D Wall hit 시 + Update Wall OverlapPoint hit 시 진단 Debug.Log 추가: - [Projectile][WallHit-OnTrigger] cardId·other.name·parent·layer· isTrigger·pos·dist/maxRange - [Projectile][WallHit-OverlapPoint] cardId·hit.name·parent·layer· pos·dist/maxRange PD Play 후 Console "[Projectile][WallHit-*]" 로그 + 박스 시각으로 어떤 collider 가 빠른 투사체 (A02·A08·A14·A15) 를 차단하는지 정확 식별. 본 PM 후속 정정 시 회수 의무. 원인 가설: 직전 commit 708ba08 Layer 16 제외 후에도 잔존 → 다른 collider (CinemachineConfiner Trigger·InfiniteHorizontalGround Left/Right 자식·Background segment 등) hit 가능성. A13 (속도 2.5) 정상·A02 (속도 6)·A08 영역 차단 — 빠른 투사체에서만 재현 패턴 정합. Co-Authored-By: Claude Opus 4.7 (1M context) --- Assets/Scripts/Skills/Effectors/HitboxDebug.cs | 6 +++--- Assets/Scripts/Skills/Effectors/Projectile.cs | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Skills/Effectors/HitboxDebug.cs b/Assets/Scripts/Skills/Effectors/HitboxDebug.cs index 62793bb..a211b43 100644 --- a/Assets/Scripts/Skills/Effectors/HitboxDebug.cs +++ b/Assets/Scripts/Skills/Effectors/HitboxDebug.cs @@ -8,9 +8,9 @@ namespace EerieVillage.Skills.Effectors /// public static class HitboxDebug { - // PD 지시 2026-05-13 — 디버그 박스·사거리 박스 시각화 off (재활용 영역 true 설정 시 즉시 노출) - // GameObject·LiveHitboxSync 부착 영역 정상 — SpriteRenderer 활성화 영역만 toggle. - public static bool ShowDebugVisuals = false; + // PD 지시 2026-05-14 — 투사체 판정 범위 다시 보여줘 → true. + // GameObject·LiveHitboxSync 부착 정상 — SpriteRenderer 활성화만 toggle. + public static bool ShowDebugVisuals = true; /// 지정 world 좌표·size 박스 spawn·lifetime 후 destroy. lifetime=0 영역 영구. public static GameObject Spawn(Vector2 pos, Vector2 size, float lifetime) diff --git a/Assets/Scripts/Skills/Effectors/Projectile.cs b/Assets/Scripts/Skills/Effectors/Projectile.cs index f64dc2e..47d836c 100644 --- a/Assets/Scripts/Skills/Effectors/Projectile.cs +++ b/Assets/Scripts/Skills/Effectors/Projectile.cs @@ -193,6 +193,15 @@ namespace EerieVillage.Skills.Effectors int hitCount = Physics2D.OverlapPoint(transform.position, filter, results); if (hitCount > 0) { + // PD 지시 2026-05-14 — 빠른 투사체 맵 경계 멈춤 진단 — OverlapPoint hit 정보 출력 + var hit = results[0]; + Debug.Log("[Projectile][WallHit-OverlapPoint] cardId=" + _data.CardId + + " hit=" + (hit != null ? hit.gameObject.name : "?") + + " parent=" + (hit != null && hit.transform.parent != null ? hit.transform.parent.name : "ROOT") + + " layer=" + (hit != null ? hit.gameObject.layer : -1) + + " pos=" + transform.position + + " dist=" + Vector2.Distance(transform.position, _spawnPosition).ToString("F2") + + "/" + _maxRange); SelfDestruct(); } } @@ -275,6 +284,15 @@ namespace EerieVillage.Skills.Effectors bool isWall = (otherLayer == 0); if (isWall) { + // PD 지시 2026-05-14 — 빠른 투사체 맵 경계 멈춤 진단 — Wall hit collider 정보 출력 + Debug.Log("[Projectile][WallHit-OnTrigger] cardId=" + _data.CardId + + " other=" + other.gameObject.name + + " parent=" + (other.transform.parent != null ? other.transform.parent.name : "ROOT") + + " layer=" + otherLayer + "(" + UnityEngine.LayerMask.LayerToName(otherLayer) + ")" + + " isTrigger=" + other.isTrigger + + " pos=" + transform.position + + " dist=" + Vector2.Distance(transform.position, _spawnPosition).ToString("F2") + + "/" + _maxRange); SelfDestruct(); } }