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).
|
// Layer 14 (Enemy) ↔ Layer 14 collide X·전역 1회 적용 (Awake 영역 매번 호출 무관·idempotent).
|
||||||
Physics2D.IgnoreLayerCollision(14, 14, true);
|
Physics2D.IgnoreLayerCollision(14, 14, true);
|
||||||
|
|
||||||
// PD 지시 2026-05-15 — 날으는 몬스터 영역 중력 무효 (KinematicObject.gravityModifier=0)
|
// PD 지시 2026-05-15 — 날으는 몬스터 영역 중력 무효 + collide 무시 (이동 정합)
|
||||||
if (IsFlying && control != null)
|
if (IsFlying && control != null)
|
||||||
{
|
{
|
||||||
control.gravityModifier = 0f;
|
control.gravityModifier = 0f;
|
||||||
control.velocity = Vector2.zero;
|
control.velocity = Vector2.zero;
|
||||||
|
control.ignoreCollisions = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PD 명시 2026-05-08 — 자동 patrol 시작 위치 저장 (측정·target은 Start 시점)
|
// PD 명시 2026-05-08 — 자동 patrol 시작 위치 저장 (측정·target은 Start 시점)
|
||||||
|
|
@ -126,6 +127,15 @@ namespace Platformer.Mechanics
|
||||||
// BT104 — 시작 위치 발판 검증·자동 재배치 (PD가 PD Foreground·빈 영역 배치 시 가까운 발판 영역으로 이동)
|
// BT104 — 시작 위치 발판 검증·자동 재배치 (PD가 PD Foreground·빈 영역 배치 시 가까운 발판 영역으로 이동)
|
||||||
void Start()
|
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 기반 시작 위치 발판 검증.
|
// BT109 — Raycast 영역 폐기 (BT104 영역 부정확). Tilemap cell 기반 시작 위치 발판 검증.
|
||||||
_startY = transform.position.y;
|
_startY = transform.position.y;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,10 @@ namespace Platformer.Mechanics
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public float gravityModifier = 1f;
|
public float gravityModifier = 1f;
|
||||||
|
|
||||||
|
// PD 지시 2026-05-15 — 날으는 몬스터 영역 collide 무시·이동 정합 (body.Cast skip)
|
||||||
|
// EnemyController.IsFlying=true 영역 Awake 영역 자동 set.
|
||||||
|
public bool ignoreCollisions = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The current velocity of the entity.
|
/// The current velocity of the entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -113,6 +117,13 @@ namespace Platformer.Mechanics
|
||||||
|
|
||||||
IsGrounded = false;
|
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 deltaPosition = velocity * Time.deltaTime;
|
||||||
|
|
||||||
var moveAlongGround = new Vector2(groundNormal.y, -groundNormal.x);
|
var moveAlongGround = new Vector2(groundNormal.y, -groundNormal.x);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue