From 6be8ccd5676db7d0ef71473d29ad9e7e6a98b8dc Mon Sep 17 00:00:00 2001 From: swrring Date: Fri, 15 May 2026 00:22:08 +0900 Subject: [PATCH] =?UTF-8?q?fix(BT12-Dev):=20=EB=B0=95=EC=A5=90=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=20X=20=EC=A0=95=EC=A0=95=20=E2=80=94=20KinematicObjec?= =?UTF-8?q?t.ignoreCollisions=20(PD=20=EC=A7=80=EC=8B=9C=202026-05-15)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 추가 보고: "공중에 체공하게 한 몬스터가 여전히 이동하지 않아" 원인: 직전 commit 40600da (gravity 0·cliffCheck skip·fallThreshold skip) 후에도 transform.position x 변동 0. velocity=(-3.50, 0) 정상이나 실제 이동 X. KinematicObject.PerformMovement body.Cast 영역 발판·기타 collider hit → distance reduce → body.position += move * 0 → 이동 0. 정정: 1. KinematicObject.ignoreCollisions bool 신설. FixedUpdate 영역 ignoreCollisions=true 시 Cast skip: body.position += velocity * Time.deltaTime 단순 이동. 2. EnemyController.Awake + Start 영역 IsFlying=true 시 control.ignoreCollisions=true 자동 set. Start 영역 보강 — MonsterRandomizer.Awake → IsFlying=true set 시점이 EnemyController.Awake 이후 케이스 (Unity Awake 호출 순서 무관 보장). 검증 (Play 모드 3초): - [t=0] pos=(-15.20, 0.50) ignoreCollisions=True - [t=3s] pos=(-18.94, 0.50) velocity=(-3.50, 0) — x Δ=-3.74 이동·y 유지 Co-Authored-By: Claude Opus 4.7 (1M context) --- Assets/Scripts/Mechanics/EnemyController.cs | 12 +++++++++++- Assets/Scripts/Mechanics/KinematicObject.cs | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) 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);