BT5-Dev #88: Enemy 절벽·벽 검출 phase+2 (시작 위치 복귀 폐기·즉시 반대 방향)
PD 보고 (2026-05-08): "이번에는 몬스터들이 다시 낭떠러지로 떨어져버렸어 (이전 버전은 떨어지지 않음)" 진단: - BT86 절벽 검출 = phase+1 (= 시작 위치 복귀) - BT87 patrol 거리 절반 (50~75) → 시작 위치 ↔ 절벽 거리 작아짐 - 시작 위치 복귀 도중 = 절벽 영역 도달 → 떨어짐 정정 (BT88): - 절벽 검출 시: phase+2 (반대 방향 patrol·시작 위치 복귀 폐기) - 벽 정지(stuckTimer) 시: phase+2 (동일·즉시 반대 방향) phase 전환 영역: - phase 0 (우측 out) → phase 2 (좌측 out) - phase 1 (시작 복귀·우측에서) → phase 3 (시작 복귀·좌측에서) - phase 2 (좌측 out) → phase 0 (우측 out) - phase 3 (시작 복귀·좌측에서) → phase 1 (시작 복귀·우측에서) 효과: - 절벽 영역 = 즉시 반대 방향 patrol (시작 위치 영역 X) - 벽 충돌 = 동일 (즉시 반대 방향) - 시작 위치 절벽 근처 영역 = 안전
This commit is contained in:
parent
050b00eaee
commit
eeb7ded8ee
|
|
@ -113,13 +113,13 @@ namespace Platformer.Mechanics
|
|||
|
||||
float moveDir = Mathf.Sign(dx);
|
||||
|
||||
// BT86 — 벽 정지·미세 밀림 검출 (PD 보고 2026-05-08): 임계값 거리 0.01→0.02 — 미세 밀림도 정지 인식
|
||||
// 벽 정지·미세 밀림 검출 — BT88: phase+2 (반대 방향 patrol·시작 위치 복귀 폐기)
|
||||
if (Mathf.Abs(transform.position.x - _lastX) < stuckMoveThreshold)
|
||||
{
|
||||
_stuckTimer += Time.deltaTime;
|
||||
if (_stuckTimer > stuckThresholdTime)
|
||||
{
|
||||
_patrolPhase = (_patrolPhase + 1) % 4;
|
||||
_patrolPhase = (_patrolPhase + 2) % 4;
|
||||
SetNextPatrolTarget();
|
||||
dx = _targetX - transform.position.x;
|
||||
moveDir = Mathf.Sign(dx);
|
||||
|
|
@ -136,9 +136,8 @@ namespace Platformer.Mechanics
|
|||
// BT83/BT84 영역 = bounds 외부+0.5m 영역도 옆 Tile (평지 인접) 검출 → 거짓 양성 → patrol X
|
||||
// 정정: 수평 Raycast 폐기 + stuckTimer 영역 0.5초 (BT81 영역 회복) — 벽 정지 시 다음 phase
|
||||
|
||||
// BT86 — 절벽 검출 (PD 보고 2026-05-08): 시작 위치 복귀 폐기·즉시 다음 phase 강제
|
||||
// 시작 위치도 절벽 가능 (낭떠러지 근처 생성 Enemy) → 시작 위치 복귀 시 떨어짐
|
||||
// 정정: 다음 phase 강제 = 반대 방향 patrol 시도
|
||||
// 절벽 검출 — BT88: phase+2 (반대 방향 patrol·시작 위치 복귀 폐기)
|
||||
// 시작 위치 복귀 영역 = 시작 위치도 절벽 근처 시 도중 떨어짐 → phase+2로 즉시 반대 방향
|
||||
if (Mathf.Abs(dx) > patrolArriveThreshold && _collider != null)
|
||||
{
|
||||
Vector2 footAhead = new Vector2(
|
||||
|
|
@ -148,7 +147,7 @@ namespace Platformer.Mechanics
|
|||
RaycastHit2D groundHit = Physics2D.Raycast(footAhead, Vector2.down, cliffCheckDepth, groundLayerMask);
|
||||
if (groundHit.collider == null)
|
||||
{
|
||||
_patrolPhase = (_patrolPhase + 1) % 4;
|
||||
_patrolPhase = (_patrolPhase + 2) % 4;
|
||||
SetNextPatrolTarget();
|
||||
dx = _targetX - transform.position.x;
|
||||
moveDir = Mathf.Sign(dx);
|
||||
|
|
|
|||
Loading…
Reference in New Issue