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}");