From 3f69cc04fe66edb0d0fedd281a30e5bce50aa8d5 Mon Sep 17 00:00:00 2001 From: swrring Date: Sun, 10 May 2026 16:46:04 +0900 Subject: [PATCH] =?UTF-8?q?fix(BT12-Dev):=20PD=20#2=20=EC=9E=AC=EB=B0=9C?= =?UTF-8?q?=20=EC=A0=95=EC=A0=95=20=E2=80=94=20Projectile.Update=20Physics?= =?UTF-8?q?2D.OverlapPoint=20Wall=20=ED=83=90=EC=A7=80=20(OnTriggerEnter2D?= =?UTF-8?q?=20=EC=98=81=EC=97=AD=20Static=20collider=20=EC=98=81=EC=97=AD?= =?UTF-8?q?=20=EB=B0=9C=ED=99=94=20X)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 근본 원인 (MCP 직접 진단): - Wall = TilemapCollider2D (Layer 0 Level·Layer 16 AutoForeground)·isTrigger=false·Rigidbody2D 부재 (Static) - Projectile = CircleCollider2D·isTrigger=true·Rigidbody2D 부재 (Static) - Static (Trigger) ↔ Static (Solid) → OnTriggerEnter2D 발화 X (Unity 2D Physics 표준) → 직전 fix `Layer 0/16 isWall` 분기 영역 호출 X 해결: - Projectile.Update 영역 매 frame Physics2D.OverlapPoint(transform.position, WallLayerMask) 영역 검출 - WallLayerMask = (1 << 0) | (1 << 16) — Layer 0 Default·Ground + Layer 16 Foreground·발판 - hit != null → SelfDestruct (영역 영역 영역 영역 영역 영역 정합) - OnTriggerEnter2D 영역 isWall 분기 영역 영역 영역 (영역 영역 영역 영역 영역) 진단 Debug.Log 회수 (이전 추가분). PD 보고 (2026-05-10): "벽에 닿은 투사체가 여전히 소멸하지 않아" PD #1 (적이 죽지 않음) — 본 PM MCP 직접 검증 결과: - Enemy maxHP 20·damage 5·4hit kill 영역 영역 - Schedule 영역 호출 영역 영역 — Execute 영역 호출 영역 정합 (직접 검증) - → Editor 영역 영역 영역 영역 영역 영역 영역 X (runInBackground·Game window) — PD 영역 직접 Play 영역 검증 영역 영역 --- Assets/Scripts/Skills/Effectors/Projectile.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Assets/Scripts/Skills/Effectors/Projectile.cs b/Assets/Scripts/Skills/Effectors/Projectile.cs index b3b4388..6347f02 100644 --- a/Assets/Scripts/Skills/Effectors/Projectile.cs +++ b/Assets/Scripts/Skills/Effectors/Projectile.cs @@ -58,12 +58,25 @@ namespace EerieVillage.Skills.Effectors Invoke(nameof(SelfDestruct), _lifetime); } + // BT12-Dev 2026-05-10 (PD #2 fix) — Wall Layer Mask (Layer 0 Default·Ground + Layer 16 Foreground·발판) + // Tilemap = Static collider·Projectile = Trigger·둘 다 Rigidbody2D 부재 → OnTriggerEnter2D 발화 X 영역 영역. + // → Update 영역 Physics2D.OverlapPoint 영역 Wall Layer 영역 영역 영역 SelfDestruct (영역 영역 영역 영역). + protected static readonly int WallLayerMask = (1 << 0) | (1 << 16); + protected virtual void Update() { transform.position += (Vector3)(_direction * _speed * Time.deltaTime); // BT12-Dev 2026-05-10 (PD #1) — 거리 제한 영역 영역 SelfDestruct if (Vector2.Distance(transform.position, _spawnPosition) >= _maxRange) + { + SelfDestruct(); + return; + } + + // BT12-Dev 2026-05-10 (PD #2 fix) — Wall 영역 OverlapPoint 영역 검출 (OnTriggerEnter2D 영역 Static collider 영역 발화 X) + var wallHit = Physics2D.OverlapPoint(transform.position, WallLayerMask); + if (wallHit != null) { SelfDestruct(); }