fix(BT12-Dev): Wall OverlapPoint grace 0.05s + spawn OffsetDistance (회귀 정정)
This commit is contained in:
parent
3f69cc04fe
commit
6a160d5f5f
|
|
@ -23,6 +23,7 @@ namespace EerieVillage.Skills.Effectors
|
||||||
// BT12-Dev 2026-05-10 (PD #1·#2) — 거리 제한·벽 충돌 영역
|
// BT12-Dev 2026-05-10 (PD #1·#2) — 거리 제한·벽 충돌 영역
|
||||||
protected Vector2 _spawnPosition;
|
protected Vector2 _spawnPosition;
|
||||||
protected float _maxRange;
|
protected float _maxRange;
|
||||||
|
protected float _spawnTime;
|
||||||
|
|
||||||
// 동일 투사체로 동일 Collider 중복 타격 방지
|
// 동일 투사체로 동일 Collider 중복 타격 방지
|
||||||
protected readonly HashSet<Collider2D> _hitTargets = new HashSet<Collider2D>();
|
protected readonly HashSet<Collider2D> _hitTargets = new HashSet<Collider2D>();
|
||||||
|
|
@ -40,6 +41,7 @@ namespace EerieVillage.Skills.Effectors
|
||||||
|
|
||||||
// BT12-Dev 2026-05-10 (PD #1) — 거리 제한 영역 영역 spawn 위치 저장
|
// BT12-Dev 2026-05-10 (PD #1) — 거리 제한 영역 영역 spawn 위치 저장
|
||||||
_spawnPosition = transform.position;
|
_spawnPosition = transform.position;
|
||||||
|
_spawnTime = Time.time;
|
||||||
|
|
||||||
// 최대 거리 = Camera 영역 영역 영역 × 1.5 (PD #1 명시)
|
// 최대 거리 = Camera 영역 영역 영역 × 1.5 (PD #1 명시)
|
||||||
// Camera ortho size 3.5·aspect 16:9 → height 7·width ~12.44 → maxRange ~18.66 unit
|
// Camera ortho size 3.5·aspect 16:9 → height 7·width ~12.44 → maxRange ~18.66 unit
|
||||||
|
|
@ -74,13 +76,17 @@ namespace EerieVillage.Skills.Effectors
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// BT12-Dev 2026-05-10 (PD #2 fix) — Wall 영역 OverlapPoint 영역 검출 (OnTriggerEnter2D 영역 Static collider 영역 발화 X)
|
// BT12-Dev 2026-05-10 (PD #2 fix·재발 정정) — Wall OverlapPoint·grace period 0.05s 영역 spawn 시점 즉시 SelfDestruct 회피.
|
||||||
|
// Player.position 영역 spawn 영역 — Player 영역 ground tile 영역 영역 영역 → 첫 frame OverlapPoint hit → 회귀.
|
||||||
|
if (Time.time - _spawnTime > 0.05f)
|
||||||
|
{
|
||||||
var wallHit = Physics2D.OverlapPoint(transform.position, WallLayerMask);
|
var wallHit = Physics2D.OverlapPoint(transform.position, WallLayerMask);
|
||||||
if (wallHit != null)
|
if (wallHit != null)
|
||||||
{
|
{
|
||||||
SelfDestruct();
|
SelfDestruct();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void OnTriggerEnter2D(Collider2D other)
|
protected virtual void OnTriggerEnter2D(Collider2D other)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,15 @@ namespace EerieVillage.Skills.Effectors
|
||||||
|
|
||||||
// 플레이어 위치·방향 취득
|
// 플레이어 위치·방향 취득
|
||||||
Transform playerTransform = inventory.transform;
|
Transform playerTransform = inventory.transform;
|
||||||
Vector2 spawnPos = playerTransform.position;
|
|
||||||
|
|
||||||
// PlayerController.Facing 참조
|
// PlayerController.Facing 참조
|
||||||
Vector2 facing = Vector2.right;
|
Vector2 facing = Vector2.right;
|
||||||
var pc = inventory.GetComponent<PlayerController>();
|
var pc = inventory.GetComponent<PlayerController>();
|
||||||
if (pc != null) facing = pc.Facing;
|
if (pc != null) facing = pc.Facing;
|
||||||
|
|
||||||
|
// BT12-Dev 2026-05-10 회귀 정정 — OffsetDistance 영역 적용 (Player 영역 영역 영역 spawn → Player 영역 OverlapPoint hit·즉시 SelfDestruct 회피)
|
||||||
|
Vector2 spawnPos = (Vector2)playerTransform.position + facing * data.OffsetDistance;
|
||||||
|
|
||||||
// 프리팹 로드 (없으면 fallback — Trigger 영역에서 직접 생성)
|
// 프리팹 로드 (없으면 fallback — Trigger 영역에서 직접 생성)
|
||||||
GameObject prefab = LoadProjectilePrefab();
|
GameObject prefab = LoadProjectilePrefab();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue