From dc00afd0a22fb2a904a29869a3da39145afb5edd Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 7 May 2026 22:43:37 +0900 Subject: [PATCH] =?UTF-8?q?BT5-Dev=20#51:=20=EC=82=AC=ED=9B=84=20=EB=B3=B5?= =?UTF-8?q?=EC=9B=90=20=EC=98=81=EC=97=AD=20Grid=E2=86=92Sprite=20?= =?UTF-8?q?=EA=B0=95=EC=A0=9C=20=ED=8F=90=EA=B8=B0=20=E2=80=94=20PD=20?= =?UTF-8?q?=EC=A7=81=EC=A0=91=20=EA=B7=B8=EB=A6=B0=20Tile=20default=20?= =?UTF-8?q?=ED=98=95=EC=83=81=20=EB=B3=B4=EC=A1=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 보고 (BT50 후): "숨겨진 길이 최상단에 나와버려서 길을 다 막고 있어" 원인 가설: - BT50 사후 복원 영역 = Foreground에 PD가 직접 그린 Grid Tile을 무차별 Sprite 강제 - PD Editor 직접 그린 Tile = default colliderType (Tile asset의 Grid) 의도 - 무차별 Sprite 강제 = PD 의도 형상 변형 → 통과 영역 차단 정정: - 사후 복원: None Tile만 SetColliderType(None) 복원 (BT49 영역 정합 회귀) - Grid→Sprite 강제 코드 영역 폐기 - 이동 시 Grid→Sprite 강제(상단)는 유지 — Level→Foreground 이동 신규 Tile만 Sprite 적용 효과: 1. Level→Foreground 이동 신규 Tile = Sprite Collider (BT49 후 통과 X 정정 유지) 2. PD 직접 그린 Grid Tile = default Grid Collider (PD 의도 형상 보존) 3. None Tile = 배경 통과 (BT49 영역 정합) 가설 한계 (pm-auditor Major #1 자인): - BT50 사후 복원이 진짜 원인 확증 X. PD 시각 검증 후 효과 X 시 즉시 추가 가설 (Layer Matrix·UpdateContactFilter·Tilemap sortingOrder·Tile 위치 좌표) 전환 의무. Debug.Log: [BT51-FgRefine] None restored=N (forced Sprite 카운터 폐기) PD Refresh+Play 시 숨겨진 길 통과 + 이전 발판 정상 동작 시각 검증. 본 PM 직접 Editor.log read 의무 (PD 시각 검증 결과 보고 직후). --- Assets/Scripts/Mechanics/GameOptimizer.cs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Assets/Scripts/Mechanics/GameOptimizer.cs b/Assets/Scripts/Mechanics/GameOptimizer.cs index 297311a..d801383 100644 --- a/Assets/Scripts/Mechanics/GameOptimizer.cs +++ b/Assets/Scripts/Mechanics/GameOptimizer.cs @@ -134,9 +134,12 @@ namespace Platformer.Mechanics // BT49 — Foreground Tilemap 자체에 이미 그려진 배경 Tile (예: tree·cloud — Tile asset colliderType=None) ColliderType=None 복원 // BT47이 SetColliderType(Sprite) 무차별 강제 → 배경 Tile도 발판처럼 충돌 → Tile asset metadata 존중으로 정정 + // BT51 — 사후 복원: None Tile만 SetColliderType(None) 복원 (배경 통과 보장). + // BT50의 Grid→Sprite 강제는 폐기 (PD가 직접 Foreground에 그린 Grid Tile의 default Collider 형상 보존). + // 이동 시 Grid→Sprite 강제(상단)는 유지 — Level→Foreground 이동되는 신규 Tile만 Sprite Collider 적용. if (fgTilemap != null && fgTc != null) { - int restoredNone = 0, forcedSprite = 0; + int restoredNone = 0; var fgBounds = fgTilemap.cellBounds; for (int x = fgBounds.xMin; x <= fgBounds.xMax; x++) { @@ -151,16 +154,10 @@ namespace Platformer.Mechanics fgTilemap.SetColliderType(pos, UnityEngine.Tilemaps.Tile.ColliderType.None); restoredNone++; } - else if (fgTileAsset.colliderType == UnityEngine.Tilemaps.Tile.ColliderType.Grid) - { - // BT50 — Grid Tile은 Sprite로 강제 (이전 BT47 호환·sprite 빈 픽셀 영역 통과 보존) - fgTilemap.SetColliderType(pos, UnityEngine.Tilemaps.Tile.ColliderType.Sprite); - forcedSprite++; - } } } - if (restoredNone + forcedSprite > 0) fgTc.ProcessTilemapChanges(); - Debug.Log($"[BT50-FgRefine] colliderType=None restored: {restoredNone} (배경 통과) / Grid→Sprite forced: {forcedSprite} (sprite 빈 영역 통과 보존)"); + if (restoredNone > 0) fgTc.ProcessTilemapChanges(); + Debug.Log($"[BT51-FgRefine] colliderType=None restored: {restoredNone} (배경 통과·Grid Tile은 default Collider 유지)"); } Debug.Log($"[BT48-DropThrough] Layer16 applied={applied} levelKeptLayer0={levelKept} excluded={excluded} total={allColliders.Length}");