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:
parent
40600da46a
commit
6be8ccd567
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue