fix(BT12-Dev): Clip path Visual → '' + VisualBounds → Collider bounds

PD 영역 1: 이동 애니메이션 재생 X
PD 영역 2: Player·Enemy 충돌 시 피해 X

근본:
1. 애니메이션 — Animator가 Visual 자식에 부착됨 + Clip path "Visual"
   - Animator path는 Animator 기준 자식 경로 → "Visual/Visual" 자식 찾음·존재 X
   - SpriteRenderer sprite curve 미적용 → 이동 시 Run sprite 교체 X

2. 피해 — VisualBounds = Visual.SpriteRenderer.bounds
   - Visual 자식 분리 후 sprite bounds는 시각만·실제 Collider 영역과 별
   - Player BoxCollider와 Visual.bounds.Intersects 정합 X

fix:
1. 35 Clip path "Visual" → "" (Animator·SpriteRenderer 동일 GameObject = Visual)
2. EnemyController.VisualBounds = _collider.bounds 우선 (CapsuleCollider 영역·실제 충돌)

영역 3 (발판 위 spawn) — PD 결정 대기 (가/나 분기).

회귀 영역 X:
- Variant Visual 자식 sprite override·AnimationController·KinematicObject 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
깃 관리자 2026-05-12 16:46:27 +09:00
parent 5355222dc7
commit daad31171b
35 changed files with 71 additions and 71 deletions

View File

@ -45,7 +45,7 @@ AnimationClip:
value: {fileID: -5660145654355639571, guid: 17c76eebde342394c85fb215bba8b791,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -57,7 +57,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -48,7 +48,7 @@ AnimationClip:
value: {fileID: 387452702324699819, guid: 37b18867d3511374d8ee213631b5e5e9,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -60,7 +60,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -381,7 +381,7 @@ AnimationClip:
value: {fileID: -5286858119833128327, guid: f8519f10c50debc448559483e0af1b42,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -411,7 +411,7 @@ AnimationClip:
isIntCurve: 0
isSerializeReferenceCurve: 0
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -66,7 +66,7 @@ AnimationClip:
value: {fileID: 1660959164018917624, guid: 4d71cfb99501a5842bf9f7a9921947c1,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -78,7 +78,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: 5718540861789459690, guid: 23f765372f77ba042b3a9fc24ca0083f,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -5660145654355639571, guid: 17c76eebde342394c85fb215bba8b791,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -27,7 +27,7 @@ AnimationClip:
value: {fileID: -8960934383930965114, guid: 0e93511696006d74bb70f6843b062793,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -39,7 +39,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -5286858119833128327, guid: f8519f10c50debc448559483e0af1b42,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -36,7 +36,7 @@ AnimationClip:
value: {fileID: 1660959164018917624, guid: 4d71cfb99501a5842bf9f7a9921947c1,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -48,7 +48,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: 6772570568847011062, guid: 22d7f73776d59e443bfdc5df93cc722b,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -2202326767459880761, guid: 8340916ba30cf4d43a684490d168597d,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -27,7 +27,7 @@ AnimationClip:
value: {fileID: -5229246680647274222, guid: fdac3552edce6004899fc6561a930585,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -39,7 +39,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -1033834695554640417, guid: 5ee9ab2bd24109d4998b005dbb896611,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -42,7 +42,7 @@ AnimationClip:
value: {fileID: 5540758421343003766, guid: 7b77ed0b473c75b46a8cf808df9727d6,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -54,7 +54,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -4185777959634795870, guid: 04e6003507a5d3244b560213e80798c6,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -30,7 +30,7 @@ AnimationClip:
value: {fileID: -8749696309496524723, guid: 65f260f3f2eac53459bbcb8e2b1abc24,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -42,7 +42,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -27,7 +27,7 @@ AnimationClip:
value: {fileID: 2107628470710603483, guid: f21d47d6cb52fda48b43104cd9d47eb4,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -39,7 +39,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -6575996007543532477, guid: 0f2b5a062cd5d154d87bd0b576102c53,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -4494687694344365529, guid: d4befd6642d700d44a125446807f283f,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: 2601651493911463726, guid: 4972fc284a0228a42a8fda57a8b9f0d7,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -5809448005921295757, guid: ecca1340e6fc9dd4da7fd52b56c9f428,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -27,7 +27,7 @@ AnimationClip:
value: {fileID: 8834350782424709361, guid: 031bfa8e5c2c3aa4ba2d9a14038ec935,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -39,7 +39,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: 3458522810709938060, guid: 20dfa65d954a4434a8cda4938dd43da9,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -533846285419534519, guid: ee9875c5fd736ce47b4a141c868960ea,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -4684235973927945495, guid: 63877c36c5c689e43bad1e5c88254dc5,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -6858779224404521370, guid: 5148f2fbf7ae04c48b4eee0e1c2787af,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -27,7 +27,7 @@ AnimationClip:
value: {fileID: 1128274576513672063, guid: ee34fce687b09d346b2daa5bddaea9f9,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -39,7 +39,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: 1103436243820016618, guid: 61969d12f2371b041b41c21d437bb4a9,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -6259733053403593476, guid: 5a927a984ccedef49ab216e91d9053f0,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: 5490449442704428975, guid: f661f134828e7054393e73a3d55241fc,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -7553137198012630962, guid: 7eb7e9271240a374dbb1e546797f81e7,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -27,7 +27,7 @@ AnimationClip:
value: {fileID: -795871036166554391, guid: cf1fe6caecd30a946ae9926f34768367,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -39,7 +39,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: 2697896165774990149, guid: 611097d2df9e43b40bec486f141c7ae9,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -33,7 +33,7 @@ AnimationClip:
value: {fileID: -2732567845405854873, guid: 8c5c9efd6e8d59c49a648510df364449,
type: 3}
attribute: m_Sprite
path: Visual
path:
classID: 212
script: {fileID: 0}
flags: 2
@ -45,7 +45,7 @@ AnimationClip:
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 3966078249
path: 0
attribute: 0
script: {fileID: 0}
typeID: 212

View File

@ -52,10 +52,10 @@ namespace Platformer.Mechanics
public Bounds Bounds => _collider.bounds;
/// <summary>
/// PD 지시 2026-05-07 — Enemy 시각(SpriteRenderer) 영역 기반 충돌 감지용. CapsuleCollider2D는 작은 ground sensor 영역(0.45×0.09)이라 감지에 부적합.
/// SpriteRenderer 부재 시 Collider Bounds로 fallback.
/// BT12-Dev 2026-05-12 — Collider Bounds 사용 (PD: Visual 자식 분리 후 sprite bounds 충돌 판정 정합 X).
/// CapsuleCollider2D는 실제 충돌 영역·정확한 Player 접촉 판정.
/// </summary>
public Bounds VisualBounds => spriteRenderer != null ? spriteRenderer.bounds : _collider.bounds;
public Bounds VisualBounds => _collider != null ? _collider.bounds : (spriteRenderer != null ? spriteRenderer.bounds : new Bounds());
PlayerController _cachedPlayer;
bool _ignoreCollisionApplied;