BT5-Dev #30: 시각 영역 정합 보정(footY -0.17) + 발판 GameObject 진단 로그
PD 의도 정확 분석: 1. 발판 통과 = 발판 아래에서 위로 점프 시 막히지 않고 통과 (One-Way Platform) 2. 밟기 위치 = Player 시각 발이 Enemy 시각 머리 정확히 닿음 본 PM 자인: - BT5-Dev #25부터 dyAtCollision = Player Collider 발 vs Enemy SpriteRenderer 머리 (시각 영역 보정 X) - Player Collider Offset y +0.10 → Player Collider 발이 시각 발보다 0.17 위 - Enemy sprite 위 여백 ≈ 0 (EnemyIdle.png 동그란 sprite 영역) - 시각 영역 정합 보정 미적용 = PD '여전히 떨어져있어' 보고 정합 정정: - EnemyController.Update: footY = Bounds.min.y + (-0.17) → 시각 발 영역 보정 - PlayerEnemyCollision: STOMP_DELTA -0.4~-0.05 → -0.3~+0.05 (시각 영역 0 근처) - PlayerController.OnCollisionEnter2D 진단 로그 — 발판 GameObject 영역 식별 (PD 영역 부딪힘 시 [BT30-Collide] 출력) 발판 영역 후속: - PD가 발판 영역 부딪힐 때 Editor Console에 [BT30-Collide] name='?' layer=N 출력 - 본 PM이 직접 Editor.log read해서 발판 GameObject 영역 식별 + Layer 8 변환 의무
This commit is contained in:
parent
4fd9369139
commit
1570aaf657
|
|
@ -25,10 +25,10 @@ namespace Platformer.Gameplay
|
|||
// 0 = 닿음 / 양수 = Player 발이 Enemy 머리 위 / 음수 = Player 발이 Enemy 머리 영역 안 영역
|
||||
// 측면 충돌 시 footHeadDelta 음수 (Player 발 영역 < Enemy 머리 영역)
|
||||
// 점프 밟기 시 footHeadDelta -0.2 ~ +0.3 영역 (착지 직전·직후)
|
||||
// BT5-Dev #28 — 시각 정합: Player Collider Offset y +0.10 + Enemy sprite 위 여백 ≈ 0.1
|
||||
// 시각 발이 Enemy 시각 머리 영역 안 0.05~0.4 침투 시점 = PD "발 닿는 느낌" 정합
|
||||
const float STOMP_DELTA_MIN = -0.4f;
|
||||
const float STOMP_DELTA_MAX = -0.05f;
|
||||
// BT5-Dev #30 — dyAtCollision 영역 시각 영역 정합 (Player·Enemy 시각 영역 보정 적용)
|
||||
// 0 = Player 시각 발이 Enemy 시각 머리 정확히 닿음. 음수 = Player 발이 Enemy 영역 안 침투.
|
||||
const float STOMP_DELTA_MIN = -0.3f; // Enemy 영역 안 0.3 단위 침투까지 허용
|
||||
const float STOMP_DELTA_MAX = 0.05f; // Enemy 머리 영역 약간 위(0.05)까지 허용
|
||||
|
||||
PlatformerModel model = Simulation.GetModel<PlatformerModel>();
|
||||
|
||||
|
|
|
|||
|
|
@ -108,13 +108,14 @@ namespace Platformer.Mechanics
|
|||
}
|
||||
if (_cachedPlayer != null && _cachedPlayer.health != null && _cachedPlayer.health.IsAlive)
|
||||
{
|
||||
// BT5-Dev #25 — Bounds 기반 dy: Player 발 vs Enemy 머리 영역 (PD 의도 정합)
|
||||
// BT5-Dev #30 — 시각 영역 정합 보정: Player Collider 발(Bounds.min.y)이 시각 발보다 ~0.17 단위 위 (Offset y +0.10)
|
||||
Vector3 ePos = transform.position;
|
||||
Vector3 pPos = _cachedPlayer.transform.position;
|
||||
float dx = Mathf.Abs(pPos.x - ePos.x);
|
||||
float footY = _cachedPlayer.Bounds.min.y; // Player 발 world y
|
||||
float headY = VisualBounds.max.y; // Enemy 머리 world y
|
||||
float footHeadDelta = footY - headY; // 0 = 닿음 / 양수 = Player 발 위 / 음수 = Player 발 아래
|
||||
const float PLAYER_COLLIDER_TO_VISUAL_FOOT = -0.17f; // Hero1 sprite 발 위치 보정
|
||||
float footY = _cachedPlayer.Bounds.min.y + PLAYER_COLLIDER_TO_VISUAL_FOOT; // Player 시각 발
|
||||
float headY = VisualBounds.max.y; // Enemy 시각 머리 (sprite 위 여백 ≈ 0)
|
||||
float footHeadDelta = footY - headY; // 0 = 시각 발이 시각 머리 닿음
|
||||
|
||||
bool inRange = dx < hitRangeX && Mathf.Abs(pPos.y - ePos.y) < hitRangeY;
|
||||
|
||||
|
|
|
|||
|
|
@ -111,6 +111,15 @@ namespace Platformer.Mechanics
|
|||
}
|
||||
}
|
||||
|
||||
// BT5-Dev #30 — 발판 GameObject 영역 식별 진단 (PD 영역 영역 영역 부딪힘 시 Console 출력)
|
||||
void OnCollisionEnter2D(Collision2D col)
|
||||
{
|
||||
if (col.gameObject == null) return;
|
||||
int layer = col.gameObject.layer;
|
||||
string name = col.gameObject.name;
|
||||
Debug.Log($"[BT30-Collide] name='{name}' layer={layer} (8=JumpThrough, 0=Default)");
|
||||
}
|
||||
|
||||
void OnHealthDeath()
|
||||
{
|
||||
controlEnabled = false;
|
||||
|
|
|
|||
Loading…
Reference in New Issue