BT5-Dev #51: 사후 복원 영역 Grid→Sprite 강제 폐기 — PD 직접 그린 Tile default 형상 보존
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 시각 검증 결과 보고 직후).
This commit is contained in:
parent
867f0de253
commit
dc00afd0a2
|
|
@ -134,9 +134,12 @@ namespace Platformer.Mechanics
|
||||||
|
|
||||||
// BT49 — Foreground Tilemap 자체에 이미 그려진 배경 Tile (예: tree·cloud — Tile asset colliderType=None) ColliderType=None 복원
|
// BT49 — Foreground Tilemap 자체에 이미 그려진 배경 Tile (예: tree·cloud — Tile asset colliderType=None) ColliderType=None 복원
|
||||||
// BT47이 SetColliderType(Sprite) 무차별 강제 → 배경 Tile도 발판처럼 충돌 → Tile asset metadata 존중으로 정정
|
// 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)
|
if (fgTilemap != null && fgTc != null)
|
||||||
{
|
{
|
||||||
int restoredNone = 0, forcedSprite = 0;
|
int restoredNone = 0;
|
||||||
var fgBounds = fgTilemap.cellBounds;
|
var fgBounds = fgTilemap.cellBounds;
|
||||||
for (int x = fgBounds.xMin; x <= fgBounds.xMax; x++)
|
for (int x = fgBounds.xMin; x <= fgBounds.xMax; x++)
|
||||||
{
|
{
|
||||||
|
|
@ -151,16 +154,10 @@ namespace Platformer.Mechanics
|
||||||
fgTilemap.SetColliderType(pos, UnityEngine.Tilemaps.Tile.ColliderType.None);
|
fgTilemap.SetColliderType(pos, UnityEngine.Tilemaps.Tile.ColliderType.None);
|
||||||
restoredNone++;
|
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 > 0) fgTc.ProcessTilemapChanges();
|
||||||
if (restoredNone + forcedSprite > 0) fgTc.ProcessTilemapChanges();
|
Debug.Log($"[BT51-FgRefine] colliderType=None restored: {restoredNone} (배경 통과·Grid Tile은 default Collider 유지)");
|
||||||
Debug.Log($"[BT50-FgRefine] colliderType=None restored: {restoredNone} (배경 통과) / Grid→Sprite forced: {forcedSprite} (sprite 빈 영역 통과 보존)");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Log($"[BT48-DropThrough] Layer16 applied={applied} levelKeptLayer0={levelKept} excluded={excluded} total={allColliders.Length}");
|
Debug.Log($"[BT48-DropThrough] Layer16 applied={applied} levelKeptLayer0={levelKept} excluded={excluded} total={allColliders.Length}");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue