diff --git a/Assets/Scripts/Mechanics/EnemyController.cs b/Assets/Scripts/Mechanics/EnemyController.cs index 35ec525..1f52380 100644 --- a/Assets/Scripts/Mechanics/EnemyController.cs +++ b/Assets/Scripts/Mechanics/EnemyController.cs @@ -105,11 +105,12 @@ namespace Platformer.Mechanics // Layer 14 (Enemy) ↔ Layer 14 collide X·전역 1회 적용 (Awake 영역 매번 호출 무관·idempotent). Physics2D.IgnoreLayerCollision(14, 14, true); - // PD 지시 2026-05-15 — 날으는 몬스터 영역 중력 무효 (KinematicObject.gravityModifier=0) + // PD 지시 2026-05-15 — 날으는 몬스터 영역 중력 무효 + collide 무시 (이동 정합) if (IsFlying && control != null) { control.gravityModifier = 0f; control.velocity = Vector2.zero; + control.ignoreCollisions = true; } // PD 명시 2026-05-08 — 자동 patrol 시작 위치 저장 (측정·target은 Start 시점) @@ -126,6 +127,15 @@ namespace Platformer.Mechanics // BT104 — 시작 위치 발판 검증·자동 재배치 (PD가 PD Foreground·빈 영역 배치 시 가까운 발판 영역으로 이동) void Start() { + // PD 지시 2026-05-15 — MonsterRandomizer.Awake → EnemyController.IsFlying=true 영역 EnemyController.Awake 이후 set 가능 + // Start 영역 IsFlying flag 재적용 (Awake 시점 미반영 케이스 보강). + if (IsFlying && control != null) + { + control.gravityModifier = 0f; + control.velocity = Vector2.zero; + control.ignoreCollisions = true; + } + // BT109 — Raycast 영역 폐기 (BT104 영역 부정확). Tilemap cell 기반 시작 위치 발판 검증. _startY = transform.position.y; diff --git a/Assets/Scripts/Mechanics/KinematicObject.cs b/Assets/Scripts/Mechanics/KinematicObject.cs index 6a97364..99d6060 100644 --- a/Assets/Scripts/Mechanics/KinematicObject.cs +++ b/Assets/Scripts/Mechanics/KinematicObject.cs @@ -19,6 +19,10 @@ namespace Platformer.Mechanics /// public float gravityModifier = 1f; + // PD 지시 2026-05-15 — 날으는 몬스터 영역 collide 무시·이동 정합 (body.Cast skip) + // EnemyController.IsFlying=true 영역 Awake 영역 자동 set. + public bool ignoreCollisions = false; + /// /// The current velocity of the entity. /// @@ -113,6 +117,13 @@ namespace Platformer.Mechanics IsGrounded = false; + // PD 지시 2026-05-15 — 날으는 몬스터 영역 body.Cast collide skip·단순 body.position 이동 + if (ignoreCollisions) + { + body.position = body.position + velocity * Time.deltaTime; + return; + } + var deltaPosition = velocity * Time.deltaTime; var moveAlongGround = new Vector2(groundNormal.y, -groundNormal.x);