BT5-Dev #45: Level Tilemap도 Layer 16 복원 (PD 의도: 점프 영역 통과·standingOnPlatform 영역 영역)

PD 보고: 다시 점프 영역 통과 X (BT44 변경 영역)

진단:
- BT44 Level Tilemap Layer 0 복원 = Player 점프 영역 영역 Level 영역 영역 천장·옆 영역 영역 영역 영역 막힘
- [BT30-Collide] name='Level' layer=0 출력 = Player Level 영역 일반 충돌

PD 의도:
- 점프해서 올라갈 발판 = Level Tilemap 자체 (Tile 영역 영역 영역 = 분리 X)
- 모든 발판 = Drop-Through (Layer 16)
- standingOnPlatform 판정 (footHit + !isJumpingThrough)으로 영역 영역 영역 영역 영역

정정:
- Level Tilemap 영역 영역 → Layer 16 (BT44 영역 폐기)
- BT43 PlayerController standingOnPlatform 영역 footHit 단독 판정 영역 그대로

동작:
- 시작 → footHit Layer 16 → standingOnPlatform=true → mask ON → Level 위 정착
- 걷기 옆 영역 발판 영역 → footHit X (Player 발 영역 발판 영역 X) → mask OFF → 통과
- 점프 (Jumping) → mask OFF 강제 → 모든 발판 통과
- 하강 후 발판 위 → footHit → 착지
This commit is contained in:
깃 관리자 2026-05-07 18:34:11 +09:00
parent 2294da9264
commit 1be657e215
1 changed files with 7 additions and 14 deletions

View File

@ -30,8 +30,8 @@ namespace Platformer.Mechanics
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
static void SetupJumpThroughPlatforms() static void SetupJumpThroughPlatforms()
{ {
// BT5-Dev #44 — 일반 지면(Level Tilemap) Layer 0 일반 충돌 + 공중 발판(Foreground·별개 BoxCollider2D)만 Layer 16 // BT5-Dev #45 — Level Tilemap 영역 Layer 16 복원 (PD 의도: 점프 영역 통과·footHit 영역 영역 영역). Tilemap 단일 GameObject = 모든 Tile 동일 동작.
int applied = 0, excluded = 0, levelKept = 0; int applied = 0, excluded = 0;
var allColliders = Object.FindObjectsByType<Collider2D>(FindObjectsSortMode.None); var allColliders = Object.FindObjectsByType<Collider2D>(FindObjectsSortMode.None);
var appliedNames = new System.Collections.Generic.List<string>(); var appliedNames = new System.Collections.Generic.List<string>();
foreach (var c in allColliders) foreach (var c in allColliders)
@ -49,35 +49,28 @@ namespace Platformer.Mechanics
continue; continue;
} }
// BT44 — Level Tilemap (TilemapCollider2D) = 일반 지면 Layer 0 그대로 (Drop-Through 영역 외)
if (c.GetComponent<UnityEngine.Tilemaps.TilemapCollider2D>() != null && c.gameObject.name == "Level")
{
if (c.gameObject.layer == 16) c.gameObject.layer = 0; // BT38·BT40·BT43 잔존 복원
levelKept++;
continue;
}
var effector = c.GetComponent<PlatformEffector2D>(); var effector = c.GetComponent<PlatformEffector2D>();
if (effector != null) Object.Destroy(effector); if (effector != null) Object.Destroy(effector);
c.usedByEffector = false; c.usedByEffector = false;
// BT5-Dev #45 — 모든 일반 Collider(Level Tilemap 포함) Layer 16 (PD 의도: 점프 영역 통과·footHit 영역 영역)
c.gameObject.layer = 16; c.gameObject.layer = 16;
applied++; applied++;
if (appliedNames.Count < 8) appliedNames.Add($"{c.gameObject.name}({c.GetType().Name})"); if (appliedNames.Count < 8) appliedNames.Add($"{c.gameObject.name}({c.GetType().Name})");
} }
// BT44 — Foreground GameObject(시각만·Collider 미부착) → TilemapCollider2D 동적 추가 + Layer 16 (공중 발판) // BT45 — Foreground 영역 미부착 시 TilemapCollider2D 동적 추가 + Layer 16
var foreground = GameObject.Find("Foreground"); var foreground = GameObject.Find("Foreground");
if (foreground != null) if (foreground != null)
{ {
var fgTc = foreground.GetComponent<UnityEngine.Tilemaps.TilemapCollider2D>(); var fgTc = foreground.GetComponent<UnityEngine.Tilemaps.TilemapCollider2D>();
if (fgTc == null) fgTc = foreground.AddComponent<UnityEngine.Tilemaps.TilemapCollider2D>(); if (fgTc == null) fgTc = foreground.AddComponent<UnityEngine.Tilemaps.TilemapCollider2D>();
foreground.layer = 16; foreground.layer = 16;
Debug.Log($"[BT44-Foreground] TilemapCollider2D + Layer 16 applied to 'Foreground'"); Debug.Log($"[BT45-Foreground] TilemapCollider2D + Layer 16 applied to 'Foreground'");
} }
Debug.Log($"[BT44-DropThrough] Layer16 applied={applied} levelKeptLayer0={levelKept} excluded={excluded} total={allColliders.Length}"); Debug.Log($"[BT45-DropThrough] Layer16 applied={applied} excluded={excluded} total={allColliders.Length}");
Debug.Log($"[BT44-DropThrough] appliedSamples=[{string.Join(", ", appliedNames)}]"); Debug.Log($"[BT45-DropThrough] appliedSamples=[{string.Join(", ", appliedNames)}]");
} }
} }
} }