fix(BT12-Dev): 박쥐 이동 X 정정 — KinematicObject.ignoreCollisions (PD 지시 2026-05-15)

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) <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-05-15 00:22:08 +09:00
parent 40600da46a
commit 6be8ccd567
2 changed files with 22 additions and 1 deletions

View File

@ -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;

View File

@ -19,6 +19,10 @@ namespace Platformer.Mechanics
/// </summary>
public float gravityModifier = 1f;
// PD 지시 2026-05-15 — 날으는 몬스터 영역 collide 무시·이동 정합 (body.Cast skip)
// EnemyController.IsFlying=true 영역 Awake 영역 자동 set.
public bool ignoreCollisions = false;
/// <summary>
/// The current velocity of the entity.
/// </summary>
@ -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);