BT5-Dev #100: 투명벽 size 정정·PD Foreground 자체 검사 X·waitTimer 정합 (PD 3건)

PD 보고 (2026-05-08):
1. 투명벽 위치 너무 짧게 멈춤 (절벽 위치보다 안쪽)
2. 대기 시간 짧음 (1~3초 대기 X)
3. 숨겨진 통로 막힘

진단:
- 1: BoxCollider size (0.1, 3) → halfWidth 0.05m → Enemy Capsule bounds 정합 시 절벽 영역 0.282m 앞 멈춤
- 3: PD Foreground 자체 가장자리 영역 = 시각 가림막 영역 끝 = 통로 영역. 본 PM 가장자리 검사 영역에 PD Foreground 포함 → 통로 영역에 투명벽 생성 → Player 통과 X (Layer 13 ↔ 18 OFF임에도 BoxCollider 영역 정합 X 가능성)

정정 (BT100):
1. BoxCollider size: (0.1, 3) → (0.02, 3) (매우 좁음)
2. BoxCollider offset.y: 1 → 0 (Tile 표면 영역·절벽 위치 정확)
3. 자체 가장자리 검사 = Level + AutoForeground 만 (PD Foreground 자체 검사 X)
4. 인접 검사 = Level + AutoForeground + PD Foreground 모두 (안전 영역 모두 포함)

효과:
- 투명벽 = 매우 좁은 영역 + Tile 표면 영역 → Enemy 영역 절벽 영역 가까이 도달
- PD Foreground 자체 가장자리 영역 = 검사 X → 숨겨진 통로 영역 투명벽 X → Player·Enemy 통과 가능
- waitTimer 영역 그대로 (1~3초 random·arrive 시점 트리거)
This commit is contained in:
깃 관리자 2026-05-08 15:01:12 +09:00
parent 63cecf04ec
commit ad7cb55bf6
1 changed files with 11 additions and 3 deletions

View File

@ -171,12 +171,19 @@ namespace Platformer.Mechanics
if (wallParent == null) wallParent = new GameObject("CliffWalls");
int wallCount = 0;
// BT100 — 자체 가장자리 검사 = Level + AutoForeground 만 (PD Foreground = 시각 가림막·통로 영역 차단 X)
var checkTilemaps = new System.Collections.Generic.List<UnityEngine.Tilemaps.Tilemap>();
if (levelTm != null) checkTilemaps.Add(levelTm);
if (autoFgTm != null) checkTilemaps.Add(autoFgTm);
// 인접 검사 = Level + AutoForeground + PD Foreground 모두 (안전 영역 모두 포함)
var allTilemaps = new System.Collections.Generic.List<UnityEngine.Tilemaps.Tilemap>();
if (levelTm != null) allTilemaps.Add(levelTm);
if (autoFgTm != null) allTilemaps.Add(autoFgTm);
if (pdFgTm != null) allTilemaps.Add(pdFgTm);
foreach (var tm in allTilemaps)
foreach (var tm in checkTilemaps)
{
var bounds = tm.cellBounds;
for (int x = bounds.xMin; x <= bounds.xMax; x++)
@ -220,8 +227,9 @@ namespace Platformer.Mechanics
wall.transform.position = worldPos;
wall.layer = 18; // EnemyWall
var box = wall.AddComponent<BoxCollider2D>();
box.size = new Vector2(0.1f, 3f); // 좁고 높은 영역
box.offset = new Vector2(0f, 1f); // Tile 위 영역 차단 (지면 위 1.5m)
// BT100 — size·offset 정정: 매우 좁은 영역(0.02) + Tile 표면 영역(offset.y=0)·절벽 위치 정확
box.size = new Vector2(0.02f, 3f);
box.offset = new Vector2(0f, 0f);
}
/// <summary>