From 1be657e215d083df35494b5c93beb39de91f6922 Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 7 May 2026 18:34:11 +0900 Subject: [PATCH] =?UTF-8?q?BT5-Dev=20#45:=20Level=20Tilemap=EB=8F=84=20Lay?= =?UTF-8?q?er=2016=20=EB=B3=B5=EC=9B=90=20(PD=20=EC=9D=98=EB=8F=84:=20?= =?UTF-8?q?=EC=A0=90=ED=94=84=20=EC=98=81=EC=97=AD=20=ED=86=B5=EA=B3=BC?= =?UTF-8?q?=C2=B7standingOnPlatform=20=EC=98=81=EC=97=AD=20=EC=98=81?= =?UTF-8?q?=EC=97=AD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 → 착지 --- Assets/Scripts/Mechanics/GameOptimizer.cs | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/Mechanics/GameOptimizer.cs b/Assets/Scripts/Mechanics/GameOptimizer.cs index 91a4cd7..6a7ae66 100644 --- a/Assets/Scripts/Mechanics/GameOptimizer.cs +++ b/Assets/Scripts/Mechanics/GameOptimizer.cs @@ -30,8 +30,8 @@ namespace Platformer.Mechanics [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] static void SetupJumpThroughPlatforms() { - // BT5-Dev #44 — 일반 지면(Level Tilemap) Layer 0 일반 충돌 + 공중 발판(Foreground·별개 BoxCollider2D)만 Layer 16 - int applied = 0, excluded = 0, levelKept = 0; + // BT5-Dev #45 — Level Tilemap 영역 Layer 16 복원 (PD 의도: 점프 영역 통과·footHit 영역 영역 영역). Tilemap 단일 GameObject = 모든 Tile 동일 동작. + int applied = 0, excluded = 0; var allColliders = Object.FindObjectsByType(FindObjectsSortMode.None); var appliedNames = new System.Collections.Generic.List(); foreach (var c in allColliders) @@ -49,35 +49,28 @@ namespace Platformer.Mechanics continue; } - // BT44 — Level Tilemap (TilemapCollider2D) = 일반 지면 Layer 0 그대로 (Drop-Through 영역 외) - if (c.GetComponent() != null && c.gameObject.name == "Level") - { - if (c.gameObject.layer == 16) c.gameObject.layer = 0; // BT38·BT40·BT43 잔존 복원 - levelKept++; - continue; - } - var effector = c.GetComponent(); if (effector != null) Object.Destroy(effector); c.usedByEffector = false; + // BT5-Dev #45 — 모든 일반 Collider(Level Tilemap 포함) Layer 16 (PD 의도: 점프 영역 통과·footHit 영역 영역) c.gameObject.layer = 16; applied++; 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"); if (foreground != null) { var fgTc = foreground.GetComponent(); if (fgTc == null) fgTc = foreground.AddComponent(); 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($"[BT44-DropThrough] appliedSamples=[{string.Join(", ", appliedNames)}]"); + Debug.Log($"[BT45-DropThrough] Layer16 applied={applied} excluded={excluded} total={allColliders.Length}"); + Debug.Log($"[BT45-DropThrough] appliedSamples=[{string.Join(", ", appliedNames)}]"); } } }