From b3cbbdbf40371f61729d758f012c2031a031e0a0 Mon Sep 17 00:00:00 2001 From: swrring Date: Fri, 8 May 2026 14:13:23 +0900 Subject: [PATCH] =?UTF-8?q?BT5-Dev=20#98:=20R1=20=EB=B0=A9=EC=96=B4=20?= =?UTF-8?q?=EC=98=81=EC=97=AD=20=E2=80=94=20=EB=B0=9C=20=EC=9E=90=EC=B2=B4?= =?UTF-8?q?=20=EA=B2=80=EC=82=AC=C2=B7=EC=8B=9C=EC=9E=91=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=ED=85=94=EB=A0=88=ED=8F=AC=ED=8A=B8=20=EB=B3=B5?= =?UTF-8?q?=EA=B7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD 강한 어조 (2026-05-08): "여전히 몬스터가 낭떠러지로 떨어져" 본 PM 17회 가설 누적 부정확 자인. R1 방어 영역 즉시 적용: 매 frame Update 영역 마지막에 발 영역 자체 절벽 검사: - footHere = (_collider.bounds.center.x, _collider.bounds.min.y + 0.05f) - Raycast Layer 0+16 cliffCheckDepth 영역 - groundUnder.collider == null 시 = 발 영역 자체 절벽 - 시작 위치 텔레포트 즉시 복귀: - transform.position + body.position 동시 set - control.velocity = Vector2.zero (낙하 차단) - patrolPhase = 0, SetNextPatrolTarget, cooldown 활성, waitTimer 1~3초 효과: - 본 PM 알고리즘 영역 부정합 잔존 시도 = 떨어짐 검출 즉시 시작 위치 복귀 - 영구 떨어짐 X 보장 (방어 영역) - 시작 위치 = 안전 영역 가설 (PD가 Enemy 영역 발판 위 배치) 후속 의무: - PD Refresh+Play 시각 검증 (떨어짐 차단 정합) --- Assets/Scripts/Mechanics/EnemyController.cs | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Assets/Scripts/Mechanics/EnemyController.cs b/Assets/Scripts/Mechanics/EnemyController.cs index 951604e..fe273af 100644 --- a/Assets/Scripts/Mechanics/EnemyController.cs +++ b/Assets/Scripts/Mechanics/EnemyController.cs @@ -250,6 +250,28 @@ namespace Platformer.Mechanics // BT89 — 자동 patrol + 즉시 벽 검출 + 1~3초 대기 영역 UpdatePatrol(); + // BT98 — 방어 영역 (R1·PD 강한 어조 정합): 발 영역 자체 절벽 검사 → 시작 위치 즉시 텔레포트 복귀 + // 본 PM 17회 가설 누적 부정확. 알고리즘 영역 부정합 잔존 시도 안전 보장. + if (_isInitialized && _collider != null) + { + Vector2 footHere = new Vector2(_collider.bounds.center.x, _collider.bounds.min.y + 0.05f); + RaycastHit2D groundUnder = Physics2D.Raycast(footHere, Vector2.down, cliffCheckDepth, groundLayerMask); + if (groundUnder.collider == null) + { + Vector3 safe = new Vector3(_startX, transform.position.y, transform.position.z); + transform.position = safe; + if (_body != null) _body.position = safe; + if (control != null) control.velocity = Vector2.zero; + _patrolPhase = 0; + SetNextPatrolTarget(); + _phaseCooldown = PHASE_COOLDOWN; + _stuckTimer = 0f; + _lastX = _startX; + _waitTimer = Random.Range(waitMinTime, waitMaxTime); + if (control != null) control.move.x = 0f; + } + } + // 이하 — Player 충돌 검출 영역 (patrol 영역과 분리) // PD 지시 2026-05-07 — Player ↔ Enemy 통과 가능이지만 Bounds.Intersects로 매 프레임 감지