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:
parent
2294da9264
commit
1be657e215
|
|
@ -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)}]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue