diff --git a/Assets/Scripts/Skills/Effectors/PoisonSwampSpawner.cs b/Assets/Scripts/Skills/Effectors/PoisonSwampSpawner.cs index e7a285e..217c66a 100644 --- a/Assets/Scripts/Skills/Effectors/PoisonSwampSpawner.cs +++ b/Assets/Scripts/Skills/Effectors/PoisonSwampSpawner.cs @@ -45,15 +45,21 @@ namespace EerieVillage.Skills.Effectors if (d < minDist) { minDist = d; nearest = e; } } - Vector2 candidate = nearest != null ? (Vector2)nearest.transform.position : playerPos; - candidate += data.OffsetXY; - - // PD 지시 2026-05-15 — ground Raycast 영역 ground 영역 영역 spawn (공중 spawn 차단) - // groundLayerMask = Layer 0 (Level Tilemap) + Layer 16 (Floating 발판) - int groundLayerMask = (1 << 0) | (1 << 16); - RaycastHit2D groundHit = Physics2D.Raycast(candidate, Vector2.down, 20f, groundLayerMask); - if (groundHit.collider == null) return; // ground 미검출 — spawn 차단 - Vector2 spawnPos = new Vector2(candidate.x, groundHit.point.y); + Vector2 spawnPos; + int groundLayerMask = (1 << 0) | (1 << 16); // Level Tilemap + Floating 발판 + if (nearest != null) + { + // 지상 Enemy 영역 — Enemy 위치 ground Raycast (정확한 ground.y) + Vector2 candidate = (Vector2)nearest.transform.position + data.OffsetXY; + RaycastHit2D groundHit = Physics2D.Raycast(candidate, Vector2.down, 20f, groundLayerMask); + if (groundHit.collider == null) return; + spawnPos = new Vector2(candidate.x, groundHit.point.y); + } + else + { + // PD 지시 2026-05-15 — 공격 가능 적 없을 시 Player.x 위치·Player.y - 0.5 직접 (ground Raycast 영역 X) + spawnPos = new Vector2(playerPos.x + data.OffsetXY.x, playerPos.y - 0.5f + data.OffsetXY.y); + } // 독 늪 GO spawn (OnHitFxPrefab = FX_Venom_Swamp) GameObject swampGo;