From 64d30a165ed80e7f6080910a0adfe06f30f41f21 Mon Sep 17 00:00:00 2001 From: swrring Date: Fri, 8 May 2026 15:20:03 +0900 Subject: [PATCH] =?UTF-8?q?BT5-Dev=20#103:=20=EC=A0=95=ED=99=95=20?= =?UTF-8?q?=EC=B8=A1=EC=A0=95=20(Start=20=EC=8B=9C=EC=A0=90=C2=B70.1m=20?= =?UTF-8?q?=EA=B0=84=EA=B2=A9=C2=B7Capsule=20=EC=A0=95=ED=99=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 명시 (2026-05-08): "미리 생성하는 시점에 맵 탐색·자신이 탐색 가능한 범위 결정" 진단: - BT94/BT97 영역 측정 영역 0.5m 간격 + groundY = transform.y - 0.34f 추정 - 0.5m 미만 영역 절벽 검출 X 가능 - groundY 추정 영역 Capsule offset 영역과 정합 X 가능 정정 (BT103): - groundY = _collider.bounds.min.y + 0.05f (Capsule 발 영역 정확) - 간격: 0.5m → 0.1m (촘촘 측정) - 안전 margin: 1.5m → 0.5m (실제 절벽 영역까지 정확) - Start 시점 1회 측정 (BT97 영역 그대로·AfterSceneLoad 후·AutoForeground Tile 활성) 효과: - Capsule 발 영역 정확 기준 측정 → 정확한 절벽 거리 - 0.1m 간격 = 0.5m 미만 절벽도 검출 - 0.5m margin = 절벽 영역에서 0.5m 안전 영역까지 patrol → 실제 절벽 영역 도달 X - BT102 텔레포트 영역 = 측정 영역 정확 시 X 트리거 → 시각상 자연 patrol - 1회 측정 (Start) = 최적화 (매 frame 측정 X) --- Assets/Scripts/Mechanics/EnemyController.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Mechanics/EnemyController.cs b/Assets/Scripts/Mechanics/EnemyController.cs index bb6d6a0..7baec92 100644 --- a/Assets/Scripts/Mechanics/EnemyController.cs +++ b/Assets/Scripts/Mechanics/EnemyController.cs @@ -133,14 +133,16 @@ namespace Platformer.Mechanics _lastX = transform.position.x; } + // BT103 — 정확 측정 (PD 명시 2026-05-08): Start 시점 1회 측정·간격 0.1m·Capsule 발 영역 정확 float MeasureSafeWalkDistance(float dir) { - float groundY = transform.position.y - 0.34f; // 발 영역 위 0.05m (Capsule offset 영역 기반 추정) - for (float d = 0.5f; d <= patrolMaxRange; d += 0.5f) + if (_collider == null) return patrolMaxRange; + float groundY = _collider.bounds.min.y + 0.05f; // Capsule 발 영역 위 0.05m + for (float d = 0.1f; d <= patrolMaxRange; d += 0.1f) { Vector2 origin = new Vector2(_startX + dir * d, groundY); RaycastHit2D hit = Physics2D.Raycast(origin, Vector2.down, cliffCheckDepth, groundLayerMask); - if (hit.collider == null) return Mathf.Max(0f, d - 1.5f); + if (hit.collider == null) return Mathf.Max(0f, d - 0.5f); // 안전 margin 0.5m } return patrolMaxRange; }