BT5-Dev #85: Enemy y+0.3·수평 Raycast 폐기 (PD 2건)
PD 보고 (2026-05-08): 1. 몬스터 바닥 뚫고 나옴 (이미지 첨부) 2. 몬스터 여전히 이동 X 진단: - 버그 1: sprite 발 영역(transform.y - 0.63·sprite half) ↔ Capsule bounds.min.y(transform.y - 0.39) = 0.24m 차이. Capsule 영역 위 Tile 표면 → sprite 영역 발이 0.24m 침투 → 시각상 침투 - 버그 2: BT83/BT84 수평 벽 Raycast 영역(bounds 외부 + 0.5m)도 옆 Tile (평지 인접) 검출 → 거짓 양성 → 매 frame phase 강제 → 모든 Enemy 정지 정정 (BT85): 1. transform.y 추가 +0.3 (Enemy.prefab 1.532→1.832 + Scene 인스턴스 19건 +0.3) 2. EnemyController.cs: - 수평 벽 Raycast (BT83/BT84 영역) 폐기 - wallCheckDistance Inspector 영역 폐기 - stuckThresholdTime: 0.3→0.5 (BT81 영역 회복·정상 이동 미세 영역 거짓 양성 차단) - 절벽 검출 영역 그대로 - stuckTimer 영역 그대로 (벽 정지 시 0.5초 후 다음 phase 강제) 효과: - 시각상 발 영역 침투 X (transform.y +0.3 → 총 +0.8 from 원본) - 정상 patrol 영역 = stuckTimer 영역 0 (frame당 transform.x 변경 큰 영역) - 벽 영역 정지 시 = stuckTimer 영역 0.5초 누적 → 다음 phase 강제 - 절벽 영역 = footAhead Raycast 영역 (Layer 0+16) 검출 → 시작 위치 복귀 후속 의무: - PD Refresh+Play 시각 검증
This commit is contained in:
parent
aad1b4e0ed
commit
007b4dd61a
|
|
@ -33,7 +33,7 @@ Transform:
|
|||
m_GameObject: {fileID: 1661912868639658944}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 5.508, y: 1.532, z: 1}
|
||||
m_LocalPosition: {x: 5.508, y: 1.832, z: 1}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
|
|
|
|||
|
|
@ -4142,7 +4142,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -6.4554644
|
||||
value: -6.1554644
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -5203,7 +5203,7 @@ PrefabInstance:
|
|||
- target: {fileID: 5102505034379151491, guid: 6f545478bd0fb7a478ed6f674a5210f5,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -0.7901306
|
||||
value: -0.4901306
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5102505034379151491, guid: 6f545478bd0fb7a478ed6f674a5210f5,
|
||||
type: 3}
|
||||
|
|
@ -13067,7 +13067,7 @@ PrefabInstance:
|
|||
- target: {fileID: 4009130065698333725, guid: 9a1bd12ebb35d4dc997aa0c5494eda9b,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0.5000000
|
||||
value: 0.8000000
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4009130065698333725, guid: 9a1bd12ebb35d4dc997aa0c5494eda9b,
|
||||
type: 3}
|
||||
|
|
@ -16838,7 +16838,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -3.3154645
|
||||
value: -3.0154645
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -118941,7 +118941,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 1.8445356
|
||||
value: 2.1445356
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -121349,7 +121349,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -6.4554644
|
||||
value: -6.1554644
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -125071,7 +125071,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -0.9454646
|
||||
value: -0.6454646
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -125506,7 +125506,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -4.9154644
|
||||
value: -4.6154644
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -125864,7 +125864,7 @@ PrefabInstance:
|
|||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4520396350849616, guid: 7d60c822c3f1b408ea7a00ecdb5e047a, type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0.5000000
|
||||
value: 0.8000000
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4520396350849616, guid: 7d60c822c3f1b408ea7a00ecdb5e047a, type: 3}
|
||||
propertyPath: m_LocalPosition.z
|
||||
|
|
@ -133748,7 +133748,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 4.3145354
|
||||
value: 4.6145354
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -137743,7 +137743,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -1.3354645
|
||||
value: -1.0354645
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -137836,7 +137836,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -6.4954643
|
||||
value: -6.1954643
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -140571,7 +140571,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -4.4654640
|
||||
value: -4.1654640
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -296270,7 +296270,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -5.7054644
|
||||
value: -5.4054644
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -297389,7 +297389,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -4.8454640
|
||||
value: -4.5454640
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -311611,7 +311611,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -0.1254645
|
||||
value: 0.1745355
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -314947,7 +314947,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -1.2554646
|
||||
value: -0.9554646
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -317850,7 +317850,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: -4.9154644
|
||||
value: -4.6154644
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
@ -320806,7 +320806,7 @@ PrefabInstance:
|
|||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
propertyPath: m_LocalPosition.y
|
||||
value: 0.0845355
|
||||
value: 0.3845355
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1658460978237467174, guid: f158aa2be3df6489185ef721f6fd79c1,
|
||||
type: 3}
|
||||
|
|
|
|||
|
|
@ -29,8 +29,7 @@ namespace Platformer.Mechanics
|
|||
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.3f; // 벽 정지 검출 시간 (BT83: 0.5→0.3 — 빠른 영역 전환)
|
||||
public float wallCheckDistance = 0.5f; // BT83: 수평 벽 Raycast 거리 (벽 가장자리 미세 밀림 차단)
|
||||
public float stuckThresholdTime = 0.5f; // 벽 정지 검출 시간 (BT85: 0.3→0.5 — 정상 이동 미세 영역 거짓 양성 차단)
|
||||
|
||||
private float _startX;
|
||||
private float _targetX;
|
||||
|
|
@ -132,26 +131,9 @@ namespace Platformer.Mechanics
|
|||
}
|
||||
_lastX = transform.position.x;
|
||||
|
||||
// BT84 — 수평 벽 검출 정정 (PD 보고 2026-05-08): BT83 거짓 양성 차단
|
||||
// BT83 시작 영역(bounds 내부)이 Foreground Tile 위에서 옆 Tile 검출 → 거짓 양성 → patrol X
|
||||
// 정정: Raycast 시작 영역 = Capsule bounds 외부 (자기 검출 X)
|
||||
if (Mathf.Abs(dx) > patrolArriveThreshold && _collider != null)
|
||||
{
|
||||
float halfWidth = _collider.bounds.extents.x;
|
||||
Vector2 wallOrigin = new Vector2(
|
||||
_collider.bounds.center.x + moveDir * (halfWidth + 0.05f),
|
||||
_collider.bounds.center.y
|
||||
);
|
||||
RaycastHit2D wallHit = Physics2D.Raycast(wallOrigin, new Vector2(moveDir, 0), wallCheckDistance, groundLayerMask);
|
||||
if (wallHit.collider != null)
|
||||
{
|
||||
_patrolPhase = (_patrolPhase + 1) % 4;
|
||||
SetNextPatrolTarget();
|
||||
dx = _targetX - transform.position.x;
|
||||
moveDir = Mathf.Sign(dx);
|
||||
_stuckTimer = 0f;
|
||||
}
|
||||
}
|
||||
// BT85 — 수평 벽 Raycast 영역 폐기 (PD 보고 2026-05-08: 모든 Enemy 정지)
|
||||
// BT83/BT84 영역 = bounds 외부+0.5m 영역도 옆 Tile (평지 인접) 검출 → 거짓 양성 → patrol X
|
||||
// 정정: 수평 Raycast 폐기 + stuckTimer 영역 0.5초 (BT81 영역 회복) — 벽 정지 시 다음 phase
|
||||
|
||||
// 절벽 검출 — 발 앞 영역 Raycast 지면 X 시 시작 위치로 즉시 복귀
|
||||
if (Mathf.Abs(dx) > patrolArriveThreshold && _collider != null)
|
||||
|
|
|
|||
Loading…
Reference in New Issue