BT5-Dev #86: Enemy 속도 2배 느림·미세 밀림 검출·절벽 즉시 phase 전환 (PD 3건)
PD 보고 (2026-05-08): 1. 몬스터 이동속도 너무 빨라 2배 느리게 2. 벽 가장자리 미세 밀림 → 낭떠러지 떨어짐 3. 낭떠러지 근처 생성 Enemy 이동 중 떨어짐 정정 (BT86): 1. AnimationController maxSpeed 7 → 3.5 (Enemy.prefab): - frame당 이동 거리 ~0.117m → ~0.058m (2배 느림) 2. stuckTimer 영역 임계값 정정: - 거리: |transform.x - _lastX| < 0.01 → 0.02 (미세 밀림 검출) - 시간: stuckThresholdTime 0.5 → 0.3 (빠른 phase 전환) - stuckMoveThreshold Inspector 영역 신규 3. 절벽 검출 영역 정정: - cliffCheckDistance: 0.6 → 0.3 (더 빠른 검출·낭떠러지 근처 보호) - 시작 위치 복귀 영역 폐기 → 다음 phase 강제 (시작 위치도 절벽 가능 가설) 효과: - Enemy 이동속도 2배 느림 - 미세 밀림 (< 0.02m/frame) = stuckTimer 누적 → 0.3초 후 phase 전환 - 절벽 영역 = 즉시 다음 phase (반대 방향 patrol) — 시작 위치 복귀 X - 낭떠러지 근처 생성 Enemy = 절벽 영역 검출 → 즉시 반대 방향
This commit is contained in:
parent
007b4dd61a
commit
8baa3a6f80
|
|
@ -200,7 +200,7 @@ MonoBehaviour:
|
|||
minGroundNormalY: 0.65
|
||||
gravityModifier: 1
|
||||
velocity: {x: 0, y: 0}
|
||||
maxSpeed: 7
|
||||
maxSpeed: 3.5
|
||||
jumpTakeOffSpeed: 7
|
||||
move: {x: 0, y: 0}
|
||||
jump: 0
|
||||
|
|
|
|||
|
|
@ -26,10 +26,11 @@ namespace Platformer.Mechanics
|
|||
public float patrolMinRange = 100f;
|
||||
public float patrolMaxRange = 150f;
|
||||
public float patrolArriveThreshold = 0.5f;
|
||||
public float cliffCheckDistance = 0.6f; // 발 앞 절벽 검출 거리
|
||||
public float cliffCheckDepth = 1.5f; // 발 아래 Raycast 거리 (BT81: 0.8→1.5 — 깊게 검출)
|
||||
public LayerMask groundLayerMask = (1 << 0) | (1 << 16); // BT81: Layer 0 (지면) + Layer 16 (발판) — Enemy/Player 거짓 양성 차단
|
||||
public float stuckThresholdTime = 0.5f; // 벽 정지 검출 시간 (BT85: 0.3→0.5 — 정상 이동 미세 영역 거짓 양성 차단)
|
||||
public float cliffCheckDistance = 0.3f; // 발 앞 절벽 검출 거리 (BT86: 0.6→0.3 — 더 빠른 검출·낭떠러지 근처 Enemy 보호)
|
||||
public float cliffCheckDepth = 1.5f; // 발 아래 Raycast 거리
|
||||
public LayerMask groundLayerMask = (1 << 0) | (1 << 16); // Layer 0 (지면) + Layer 16 (발판)
|
||||
public float stuckThresholdTime = 0.3f; // 벽 정지 검출 시간 (BT86: 0.5→0.3 — 빠른 영역 전환)
|
||||
public float stuckMoveThreshold = 0.02f; // BT86: 정지 판정 거리 임계값 (0.01→0.02 — 미세 밀림 검출)
|
||||
|
||||
private float _startX;
|
||||
private float _targetX;
|
||||
|
|
@ -112,8 +113,8 @@ namespace Platformer.Mechanics
|
|||
|
||||
float moveDir = Mathf.Sign(dx);
|
||||
|
||||
// BT81 — 벽 정지 검출 (PD 보고 2026-05-08): 일정 시간 transform.x 변경 미세 시 = 벽 영역 → 다음 phase 강제
|
||||
if (Mathf.Abs(transform.position.x - _lastX) < 0.01f)
|
||||
// BT86 — 벽 정지·미세 밀림 검출 (PD 보고 2026-05-08): 임계값 거리 0.01→0.02 — 미세 밀림도 정지 인식
|
||||
if (Mathf.Abs(transform.position.x - _lastX) < stuckMoveThreshold)
|
||||
{
|
||||
_stuckTimer += Time.deltaTime;
|
||||
if (_stuckTimer > stuckThresholdTime)
|
||||
|
|
@ -135,7 +136,9 @@ namespace Platformer.Mechanics
|
|||
// BT83/BT84 영역 = bounds 외부+0.5m 영역도 옆 Tile (평지 인접) 검출 → 거짓 양성 → patrol X
|
||||
// 정정: 수평 Raycast 폐기 + stuckTimer 영역 0.5초 (BT81 영역 회복) — 벽 정지 시 다음 phase
|
||||
|
||||
// 절벽 검출 — 발 앞 영역 Raycast 지면 X 시 시작 위치로 즉시 복귀
|
||||
// BT86 — 절벽 검출 (PD 보고 2026-05-08): 시작 위치 복귀 폐기·즉시 다음 phase 강제
|
||||
// 시작 위치도 절벽 가능 (낭떠러지 근처 생성 Enemy) → 시작 위치 복귀 시 떨어짐
|
||||
// 정정: 다음 phase 강제 = 반대 방향 patrol 시도
|
||||
if (Mathf.Abs(dx) > patrolArriveThreshold && _collider != null)
|
||||
{
|
||||
Vector2 footAhead = new Vector2(
|
||||
|
|
@ -145,11 +148,11 @@ namespace Platformer.Mechanics
|
|||
RaycastHit2D groundHit = Physics2D.Raycast(footAhead, Vector2.down, cliffCheckDepth, groundLayerMask);
|
||||
if (groundHit.collider == null)
|
||||
{
|
||||
// 절벽 영역 → 시작 위치 즉시 복귀 (반대 방향 phase 강제)
|
||||
_patrolPhase = (_patrolPhase % 2 == 0) ? _patrolPhase + 1 : _patrolPhase;
|
||||
_targetX = _startX;
|
||||
_patrolPhase = (_patrolPhase + 1) % 4;
|
||||
SetNextPatrolTarget();
|
||||
dx = _targetX - transform.position.x;
|
||||
moveDir = Mathf.Sign(dx);
|
||||
_stuckTimer = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue