fix(BT12-Dev): PD #2 재발 정정 — Projectile.Update Physics2D.OverlapPoint Wall 탐지 (OnTriggerEnter2D 영역 Static collider 영역 발화 X)

근본 원인 (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<EnemyDeath> 영역 호출 영역 영역 — Execute 영역 호출 영역 정합 (직접 검증)
- → Editor 영역 영역 영역 영역 영역 영역 영역 X (runInBackground·Game window) — PD 영역 직접 Play 영역 검증 영역 영역
This commit is contained in:
깃 관리자 2026-05-10 16:46:04 +09:00
parent 5cb6040c8a
commit 3f69cc04fe
1 changed files with 13 additions and 0 deletions

View File

@ -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();
}