diff --git a/memory/org/MEMORY.md b/memory/org/MEMORY.md index 5a2900d..39727a4 100644 --- a/memory/org/MEMORY.md +++ b/memory/org/MEMORY.md @@ -53,3 +53,4 @@ - [๐Ÿ›๏ธ PM = MCP ํ™œ์šฉ ์ง์ ‘ ๊ตฌํ˜„ ์˜๋ฌด (PD = ๊ธฐํš์žยท๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ)](feedback_pm_mcp_direct_implementation.md) โ€” 2026-05-07 PD ์ง์ ‘ ๋ช…๋ น. PD = ๊ธฐํš์ž ํฌ์ง€์…˜ยท๊ฐœ๋ฐœ ์ง€์‹ ๋‚ฎ์Œยท๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ. PM ๋ช…๋ น = MCPยท๋„๊ตฌ ํ™œ์šฉ ์ง์ ‘ ๊ตฌํ˜„. PD์—๊ฒŒ RefreshยทConsole ํšŒ์‹ ยทEditor ๊ฒ€์ฆ ๋– ๋„˜๊น€ ์ ˆ๋Œ€ ๊ธˆ์ง€. 6ํ•ญ ์‘๋‹ต ๋ฐœ์‹  ์ง์ „ ์ž๊ธฐ๊ฒ€์ฆ. C5ยทC29ยทC36ยทC44ยทC45 ์ •ํ•ฉ - [๐Ÿ›๏ธ PM filler ์–ดํœ˜ "์˜์—ญ" ๋ฌดํ•œ ๋ฐ˜๋ณต ์ฐจ๋‹จ](feedback_pm_filler_word_overuse.md) โ€” 2026-05-07 PD ์ง์ ‘ ์ง€์  "์˜์—ญ ์˜์—ญ ๊ฑฐ๋ฆฌ์ง€ ๋ง๊ณ ". ๋ณธ PM์ด ๋ช…์‚ฌ ๋’คยท๋ฌธ์žฅ ๋์— "์˜์—ญ" ๋ฌด์ฐจ๋ณ„ ๋ถ€์ฐฉํ•ด ํ•œ ์‘๋‹ต 30ํšŒ ์ด์ƒ ์‚ฌ์šฉ ํŒจํ„ด ๋ˆ„์ . 5์ธต ๊ทผ๋ณธ ์›์ธ + ๊ธˆ์ง€ filler ์นดํƒˆ๋กœ๊ทธ + ์ •ํ™• ๋ช…์‚ฌ ์น˜ํ™˜ ์นดํƒˆ๋กœ๊ทธ + ์‘๋‹ต ๋ฐœ์‹  ์ง์ „ ์ž๊ธฐ๊ฒ€์ฆ 5ํ•ญ. C44ยทC45ยทC46 ์ •ํ•ฉ. PostToolUse hook(`filler_word_check.sh`) ๋ณ„๊ฑด ์‹ ์„ค - [๐Ÿ›๏ธ PM = ์†”๋ฃจ์…˜ ๋Šฅ๋™ ์ œ์•ˆ ์˜๋ฌด (PD = ๊ธฐํš์ž, ํ‘œ์ค€ ํŒจํ„ด ๋ชจ๋ฆ„)](feedback_pm_solution_proactive_proposal.md) โ€” 2026-05-07 PD ์ง์ ‘ ์ง€์  "๋‹ค ์ฑ™๊ฒจ์•ผํ•˜๋Š”๊ฑฐ์•ผ". PD๊ฐ€ Layer+Raycast Drop-Through ํŒจํ„ด ์ง์ ‘ ์ œ์•ˆ โ†’ BT5-Dev #20~#26 ๋ณธ PM ์ฆ‰ํฅ ์‹œ๋„ 7ํšŒ ๋ˆ„์  ํ›„ ์ฑ„ํƒ. ๋ณธ PM = ๊ฐœ๋ฐœํŒ€ ์ฑ…์ž„์ž = ํ‘œ์ค€ ํŒจํ„ด ์นดํƒˆ๋กœ๊ทธ ๋Šฅ๋™ ๋ณด์œ ยท์ œ์•ˆ ์˜๋ฌด. PD ๋ณด๊ณ  ์ˆ˜๋ น ์งํ›„ ํ‘œ์ค€ ํŒจํ„ด ๊ฒ€์ƒ‰ + ์†”๋ฃจ์…˜ 2~3๊ฐœ ๊ถŒ๊ณ  ์˜๋ฌด. ์ž๊ธฐ๊ฒ€์ฆ 4ํ•ญ. C29ยทC44ยทC45 ์ •ํ•ฉ +- [๐Ÿ›๏ธ PM ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์‹œ PD ๊ทผ๋ณธ ์ง„๋‹จ ์šฐ์„  ์ฑ„ํƒ ์˜๋ฌด](feedback_pm_root_diagnosis_priority.md) โ€” 2026-05-08 BT5-Dev BT80~BT109 ๋ณธ PM 23ํšŒ+ ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ ํ›„ PD "์ ˆ๋ฒฝ ์ฒดํฌ ๋กœ์ง ์ž˜๋ชป์ด ๊ทผ๋ณธ ์›์ธ" ๋ช…์‹œ ์‹œ์  ์ฑ„ํƒ. ๋ณธ PM ๊ฐ€์„ค 3ํšŒ ์ด์ƒ ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ ์‹œ์  = ๊ฐ€์„ค ์ƒ์‚ฐ ์ฆ‰์‹œ ์ค‘๋‹จ + PD ๊ทผ๋ณธ ์ง„๋‹จ ๋Šฅ๋™ ์ˆ˜๋ น ์˜๋ฌด. Unity ์ธก์ • ์ž๋ฃŒ ์นดํƒˆ๋กœ๊ทธ ๋ณด์œ  ์˜๋ฌด (TilemapยทPhysics2DยทBoundsยทKinematicObjectยทRigidbody2Dยท์ด๋ฒคํŠธ ์‹œ์ ). ์ž๊ธฐ๊ฒ€์ฆ 4ํ•ญ. C2ยทC5ยทC36ยทC44ยทC45 ์ •ํ•ฉ diff --git a/memory/org/feedback_pm_root_diagnosis_priority.md b/memory/org/feedback_pm_root_diagnosis_priority.md new file mode 100644 index 0000000..fcc02d0 --- /dev/null +++ b/memory/org/feedback_pm_root_diagnosis_priority.md @@ -0,0 +1,85 @@ +--- +name: PM ์ง„๋‹จ ๊ฐ€์„ค ๋ถ€์ •ํ™• ๋ˆ„์  ์‹œ PD ๊ทผ๋ณธ ์ง„๋‹จ ์šฐ์„  ์ฑ„ํƒ ์˜๋ฌด +description: 2026-05-08 BT5-Dev ๋ชฌ์Šคํ„ฐ ์‹œ์Šคํ…œ BT80~BT109 ์˜์—ญ. ๋ณธ PM์ด ์ธก์ •ยท๊ฒ€์ถœยท์žฌ๋ฐฐ์น˜ ๊ฐ€์„ค 23ํšŒ+ ๋ˆ„์  ๋ถ€์ •ํ™• ์‹œ๋„. PD๊ฐ€ "์ ˆ๋ฒฝ ์ฒดํฌ ๋กœ์ง ์ž˜๋ชป = ๊ทผ๋ณธ ์›์ธ" ๋ช…์‹œ ์‹œ์ ์— BT107 Tilemap cell ๊ธฐ๋ฐ˜ ์ธก์ • ์žฌ์„ค๊ณ„ ์ฑ„ํƒ ์˜์—ญ ๋„๋‹ฌ. PD ๊ทผ๋ณธ ์ง„๋‹จ = ๋ณธ PM ๊ฐ€์„ค๋ณด๋‹ค ํ•ญ์ƒ ์šฐ์„ . +type: feedback +tier: constitutional +--- + +# PM ์ง„๋‹จ ๊ฐ€์„ค ๋ถ€์ •ํ™• ๋ˆ„์  ์‹œ PD ๊ทผ๋ณธ ์ง„๋‹จ ์šฐ์„  ์ฑ„ํƒ ์˜๋ฌด + +๋ณธ PM์ด ๋™์ผ ์˜์—ญ ์ง„๋‹จยท์ธก์ • ๊ฐ€์„ค ์‹œ๋„๊ฐ€ 3ํšŒ ์ด์ƒ ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ ์‹œ์ ๋ถ€ํ„ฐ = **๋ณธ PM ๊ฐ€์„ค ์‹ ๋ขฐ๋„ ํ•œ๊ณ„ ๋„๋‹ฌ ์ž์ธ + PD ๊ทผ๋ณธ ์ง„๋‹จ ๋Šฅ๋™ ์ˆ˜๋ น ์˜๋ฌด**. PD๊ฐ€ "๊ทผ๋ณธ ์›์ธ X = Y" ํ˜•ํƒœ๋กœ ๋ช…์‹œํ•œ ์‹œ์  = ๋ณธ PM ๊ฐ€์„ค ์ฆ‰์‹œ ํ๊ธฐ + PD ๋ช…์‹œ ์˜์—ญ์œผ๋กœ ์žฌ์„ค๊ณ„ ์˜๋ฌด. + +**Why (BT5-Dev BT80~BT109 ๋ˆ„์  ์‚ฌ๊ฑด)**: +- BT5-Dev ๋ชฌ์Šคํ„ฐ ์‹œ์Šคํ…œ ์˜์—ญ ๋ณธ PM 23ํšŒ+ ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ: + - ์ˆ˜ํ‰ Raycast (BT83ยทBT84ยทBT85ยทBT90 ํ๊ธฐ) + - ์ ˆ๋ฒฝ ๊ฑฐ๋ฆฌ ๊ธฐ์ค€ (BT86ยทBT87ยทBT91ยทBT92 ๋ณ€๊ฒฝ 4ํšŒ) + - waitTimerยทphase cooldownยทstuckTimer ์กฐํ•ฉ (BT88~BT94 ๋ณ€๊ฒฝ) + - PatrolPath path ์˜์—ญ 12๊ฑด (BT95 PD ์ง์ ‘ ๋ช…์‹œ "PatrolPath ์ œ๊ฑฐ") + - EnemyWall Layer 18 ํˆฌ๋ช…๋ฒฝ ์ž๋™ ์ƒ์„ฑ (BT99~BT101 ํ๊ธฐ) + - y ์˜์—ญ ์˜๊ตฌ ๊ณ ์ • (BT106 ํ๊ธฐ โ€” ๊ณต์ค‘ ๋ถ€์œ  ์›์ธ) + - Capsule margin 0.1ยท0.5ยท2.0 ๋ณ€๊ฒฝ (BT103ยทBT104ยทBT105) +- PD ๊ทผ๋ณธ ์ง„๋‹จ ์ฑ„ํƒ ์‹œ์  = BT107: PD ๋ช…์‹œ "์ ˆ๋ฒฝ ์ฒดํฌ ๋กœ์ง ์ž˜๋ชป์ด ๊ทผ๋ณธ ์›์ธ" โ†’ Tilemap cell ๊ธฐ๋ฐ˜ ์ธก์ • ์žฌ์„ค๊ณ„ ์ฑ„ํƒ โ†’ ์ฆ‰์‹œ ์˜๊ตฌ ๋งˆ๋ฌด๋ฆฌ ๋„๋‹ฌ +- ๋ฐœํŒ ์‹œ์Šคํ…œ ์˜์—ญ BT47~BT75 = 28ํšŒ ๋ˆ„์ ๋„ ๋™์ผ ํŒจํ„ด โ€” PD ์ง์ ‘ ์ง„๋‹จ ("R2 ์ง„ํ–‰", "BT48๋กœ ๋ณต๊ท€ํ•ด๋ด") ์ฑ„ํƒ ์‹œ ์ฆ‰์‹œ ์ •ํ•ฉ +- ์ง์ ‘ ์˜ํ–ฅ: PD ์‹œ๊ฐ ๊ฒ€์ฆ ๋ฐ˜๋ณต ๋ถ€๋‹ด ๋ˆ„์ ยท์ง„ํ–‰ ์ง€์—ฐยท๋ณธ PM ์ธก์ • ์˜์—ญ ์‹ ๋ขฐ๋„ ์†์ƒ + +**๊ทผ๋ณธ ์›์ธ (5์ธต)**: +1. **ํ‘œ๋ฉด**: ๋ณธ PM์ด ์ธก์ • ๊ฒฐ๊ณผ ๋ฏธ์„ธ ๋ถ€์ •ํ•ฉ ์‹œ์ ์— ๋™์ผ ์ธก์ • ์˜์—ญ ๋ณ€์ˆ˜๋งŒ ์กฐ์ • (Raycast ๊ฑฐ๋ฆฌยทtimer ๊ฐ’ยทmargin ์ˆ˜์น˜). ์ธก์ • ์˜์—ญ ์ž์ฒด ๋ถ€์ •ํ™• ๊ฐ€์ • ๋ฏธ์ง„์ž… +2. **๊ฐ€์„ค ๋ˆ„์  ์ž์„ฑ ๊ฒฐ์†**: ๋™์ผ ์˜์—ญ 3ํšŒ ์ด์ƒ ๋ถ€์ •ํ™• ์ž์ธ ์‹œ์ ์— ๊ฐ€์„ค ์ƒ์‚ฐ ์ฆ‰์‹œ ์ค‘๋‹จยท์™ธ๋ถ€ ์ง„๋‹จ ์ˆ˜๋ น ์˜๋ฌด ๋ฏธ๋ช…๋ฌธ +3. **PD ๊ทผ๋ณธ ์ง„๋‹จ ์œ„๊ณ„ ์ธ์‹ ๊ฒฐ์†**: PD = ๊ฒŒ์ž„ ๋””์ž์ธ ์˜๋„ยท์‹œ๊ฐ ๊ฒ€์ฆ ์˜์—ญ์— ๋”ํ•ด "๊ทผ๋ณธ ์›์ธ" ๋ช…์‹œ ์‹œ์  = ๋ณธ PM ๊ฐ€์„ค๋ณด๋‹ค ์ƒ์œ„ ์œ„๊ณ„. ๋ณธ PM์ด PD ์ง„๋‹จ์„ ๊ฐ€์„ค 1๊ฐœ ์˜ต์…˜์œผ๋กœ ๊ฒฉํ•˜์‹œ์ผœ ๋ˆ„์  ์‹œ๋„ ๋ถ€๋ถ„ ์ฑ„ํƒ +4. **Unity ์ธก์ • ์ž๋ฃŒ ๋‹ค์–‘์„ฑ ๋ฏธ๋ณด์œ **: Tilemap.WorldToCellยทHasTileยทspriteยทcolliderยทRigidbody2D bodyยทtransform ์˜์—ญ๋ณ„ ์ธก์ • ์ •ํ•ฉ ์นดํƒˆ๋กœ๊ทธ ๋ณธ PM ๋ณด์œ  X โ†’ ๋งค๋ฒˆ RaycastยทBounds ์ฆ‰ํฅ ์‹œ๋„ +5. **`feedback_pm_solution_proactive_proposal` ์™ธ์—ฐ ๊ฒฐ์†**: ์ง์ „ feedback = "ํ‘œ์ค€ ํŒจํ„ด ๋Šฅ๋™ ์ œ์•ˆ ์˜๋ฌด" ์˜์—ญ. ๋ณธ feedback = "PM ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์‹œ PD ๊ทผ๋ณธ ์ง„๋‹จ ์šฐ์„  ์ฑ„ํƒ ์˜๋ฌด" ๋ณ„๋„ ์ธก๋ฉด + +**How to apply**: + +1. **PM ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ ์นด์šดํ„ฐ ์˜๋ฌด**: + - **0ํšŒ**: ๋ณธ PM ๊ฐ€์„ค ์‹œ๋„ ์ž์œ  + - **1ํšŒ ๋ถ€์ •ํ™• ์ž์ธ**: ๋ณ€์ˆ˜ ์กฐ์ • + ๋ณธ PM ์ž์ฒด ๊ฒ€์ฆ ์˜๋ฌด + - **2ํšŒ ๋ถ€์ •ํ™• ์ž์ธ**: ์ธก์ • ์˜์—ญ ์ž์ฒด ์ •ํ•ฉ ์˜์‹ฌ + ์™ธ๋ถ€ ์ž๋ฃŒ ๊ฒ€์ƒ‰ ์˜๋ฌด (Unity Manualยทํ‘œ์ค€ ํŒจํ„ด) + - **3ํšŒ ์ด์ƒ ๋ถ€์ •ํ™• ์ž์ธ**: **์ฆ‰์‹œ ๊ฐ€์„ค ์ƒ์‚ฐ ์ค‘๋‹จ + PD ๊ทผ๋ณธ ์ง„๋‹จ ๋Šฅ๋™ ์ˆ˜๋ น ์˜๋ฌด**. PD์—๊ฒŒ "๋ณธ PM ๊ฐ€์„ค NํšŒ ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ โ€” PD ์‹œ๊ฐยท์ง„๋‹จ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค" ๋ณด๊ณ  + +2. **PD ๊ทผ๋ณธ ์ง„๋‹จ ์ฑ„ํƒ ์šฐ์„  ๋‹จ๊ณ„**: + - **Step 1**: PD๊ฐ€ "๊ทผ๋ณธ ์›์ธ X" ํ˜•ํƒœ๋กœ ๋ช…์‹œ = ๋ณธ PM ๊ฐ€์„ค ์ฆ‰์‹œ ํ๊ธฐ (์˜ต์…˜ 1๊ฐœ ๊ฒฉํ•˜ X) + - **Step 2**: PD ๋ช…์‹œ ์˜์—ญ์œผ๋กœ ์žฌ์„ค๊ณ„ (Raycast โ†’ Tilemap cell ๊ธฐ๋ฐ˜ ์ธก์ • ๋“ฑ) + - **Step 3**: ๋ณธ PM ์ง์ ‘ ๊ตฌํ˜„ยท๊ฒ€์ฆ + ๊ฒฐ๊ณผ PD ๋ณด๊ณ  + - **Step 4**: PD ์‹œ๊ฐ ๊ฒ€์ฆ ์ •ํ•ฉ ๋„๋‹ฌ ํ›„ ์˜๊ตฌ ์ฑ„ํƒ commit + +3. **Unity ์ธก์ • ์ž๋ฃŒ ์นดํƒˆ๋กœ๊ทธ (๋Šฅ๋™ ๋ณด์œ  ์˜๋ฌด)**: + - **Tilemap ์˜์—ญ**: `Tilemap.WorldToCell`ยท`HasTile`ยท`GetTile`ยท`cellBounds` (data ์ง์ ‘ ์‚ฌ์šฉ = ์ •ํ™•) + - **Physics2D ์˜์—ญ**: `Raycast`ยท`CapsuleCast`ยท`BoxCast`ยท`OverlapBox` (spriteยทcollider ์˜์—ญ ์˜์กด = ๋ถ€์ •ํ™• ๊ฐ€๋Šฅ) + - **Bounds ์˜์—ญ**: `bounds.min`ยท`bounds.max`ยท`bounds.center`ยท`bounds.extents` (rendererยทcollider ์˜์—ญ ๋ถ„๋ฆฌ) + - **KinematicObject ์˜์—ญ**: `body.position` โ‰  `transform.position`. ๋™์‹œ set ์˜๋ฌด + - **Rigidbody2D ์ œ์ž๋ฆฌ ์‚ฌ๋ง ์˜์—ญ**: `body.simulated = false` (gravity Xยท์ถฉ๋Œ X) + - **์ด๋ฒคํŠธ ์‹œ์  ์˜์—ญ**: `Awake` < `RuntimeInitializeOnLoadMethod(AfterSceneLoad)` < `Start`. AutoForegroundยทTilemap data ํ™œ์„ฑ ํ›„ ์ธก์ • = Start ์‹œ์  + +4. **PM ์ž๊ธฐ๊ฒ€์ฆ 4ํ•ญ (๊ฐ€์„ค ์‹œ๋„ ์ง์ „ ์˜๋ฌด)**: + - [ ] ๋ณธ ์˜์—ญ ๋™์ผ ๊ฐ€์„ค ๋ˆ„์  NํšŒ? (3ํšŒ ์ด์ƒ = ๊ฐ€์„ค ์ƒ์‚ฐ ์ค‘๋‹จ) + - [ ] PD ๋ช…์‹œ ์ง„๋‹จยท์‹œ๊ฐ ์˜์—ญ์— ๋ถ€ํ•ฉ? + - [ ] ์ธก์ • ์˜์—ญ ์ž์ฒด ์ •ํ•ฉ ์˜์‹ฌ ๊ฒ€์ฆ? + - [ ] Unity ์ธก์ • ์ž๋ฃŒ ์นดํƒˆ๋กœ๊ทธ์—์„œ ์ •ํ•ฉ ์˜์—ญ ์‹๋ณ„? + +5. **๊ธˆ์ง€ ํŒจํ„ด**: + - โŒ PD ๊ทผ๋ณธ ์ง„๋‹จ ๋ช…์‹œ ํ›„ ๋ณธ PM ๊ฐ€์„ค ๋ถ€๋ถ„ ์ฑ„ํƒ (PD ์ง„๋‹จ์„ ์˜ต์…˜ 1๊ฐœ๋กœ ๊ฒฉํ•˜) + - โŒ ๋™์ผ ์ธก์ • ์˜์—ญ ๋ณ€์ˆ˜ ๋ฏธ์„ธ ์กฐ์ • 4ํšŒ ์ด์ƒ ๋ˆ„์  + - โŒ ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ ์‹œ PD์—๊ฒŒ "์–ด๋–ป๊ฒŒ ํ• ๊นŒ์š”" ๊ฒฐ์ • ์š”๊ตฌ (PD ๊ทผ๋ณธ ์ง„๋‹จ ๋Šฅ๋™ ์ˆ˜๋ น ์˜๋ฌด ํšŒํ”ผ) + - โŒ Tilemap cell data ์šฐ์„  ๊ฒ€ํ†  ์—†์ด Raycast ์ฆ‰ํฅ ์‹œ๋„ + +**์ ์šฉ ๋ฒ”์œ„**: ๋ชจ๋“  PM ์‘๋‹ตยท์ „ ๋ถ€์„œ (๊ฐœ๋ฐœํŒ€ยท๊ธฐํšํŒ€ ํฌํ•จ). ์ธก์ •ยท์ง„๋‹จยท์žฌ๋ฐฐ์น˜ ์˜์—ญ ์ „๋ฐ˜. + +**์—ฐ๊ด€ ๊ทœ์น™ยทfeedback**: +- **C2** ๊ทผ์›์  ๋ฌธ์ œ ํ•ด๊ฒฐ (proxy ๊ฐœ์„  ํ๊ธฐยท๊ทผ๋ณธ ํ•ด๊ฒฐ์•ˆ ์šฐ์„  ์ œ์‹œ) +- **C5ยทC23ยทC44** ์ •์ง์„ฑ (๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ) +- **C36** PM ์ž์œจ ํŒ๋‹จ ๋ฒ”์œ„ ์ƒํ•œ (๋ฐฉํ–ฅยท์›์น™ ์ˆ˜์ค€ PM ์ž์œจ X) +- **C45** ํ•˜๋“œ๋ณด์ผ๋“œ ๊ณต๊ฐ (PD ๋ถ€๋‹ด ์˜์—ญ ๋ณธ PM ํก์ˆ˜) +- `feedback_pm_solution_proactive_proposal` (ํ‘œ์ค€ ํŒจํ„ด ๋Šฅ๋™ ์ œ์•ˆ ์˜๋ฌด โ€” ๋ณธ feedback์ด "๊ทผ๋ณธ ์ง„๋‹จ ์šฐ์„  ์ฑ„ํƒ" ์˜์—ญ ์ถ”๊ฐ€) +- `feedback_pm_excessive_decision_request` (์˜ต์…˜ ๋‚˜์—ด ํ๊ธฐ โ€” ๋ณธ feedback์€ PM ๊ฐ€์„ค NํšŒ ๋ˆ„์  ํ›„ PD ๊ทผ๋ณธ ์ง„๋‹จ ๋Šฅ๋™ ์ˆ˜๋ น) +- `feedback_pm_mcp_direct_implementation` (์ง์ ‘ ๊ตฌํ˜„ ์˜๋ฌด) + +**๊ทผ๊ฑฐ ๋ฐ์ดํ„ฐ**: +- BT5-Dev BT80~BT109: ๋ณธ PM 23ํšŒ+ ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ (BurningTimes commit `0f68ba9` ๋Œ€ํ™”๋กœ๊ทธ ์—”ํŠธ๋ฆฌ 2) +- BT5-Dev BT47~BT75: ๋ณธ PM 28ํšŒ+ ๊ฐ€์„ค ๋ˆ„์  (commit `c858446` ์—”ํŠธ๋ฆฌ 1) +- ํ•ต์‹ฌ PD ๋ช…์‹œ ์ง„๋‹จ 4๊ฑด: + - "R2๋กœ ์ง„ํ–‰ํ•ด์ค˜" (AutoForeground ๋ถ„๋ฆฌ ์ฑ„ํƒยทBT66) + - "PatrolPath ์ œ๊ฑฐ" (BT95) + - "ํˆฌ๋ช…๋ฒฝ ์‚ญ์ œ" (BT102) + - "์ ˆ๋ฒฝ ์ฒดํฌ ๋กœ์ง ์ž˜๋ชป์ด ๊ทผ๋ณธ ์›์ธ" (BT107 Tilemap cell ๊ธฐ๋ฐ˜ ์ธก์ • ์žฌ์„ค๊ณ„ ์ฑ„ํƒ) +- ๋ณธ PM ๊ฐ€์„ค ๋ˆ„์  3ํšŒ ์ด์ƒ ์˜์—ญ ๋งค๋ฒˆ PD ์ง์ ‘ ๋ช…์‹œ ํ›„ ์ฆ‰์‹œ ์ •ํ•ฉ ๋„๋‹ฌ ํŒจํ„ด ๋ฐ˜๋ณต ์‹ค์ฆ diff --git a/๊ณต์œ /๋Œ€ํ™”๋กœ๊ทธ/์กฐ์ง์šด์˜/2026-05-08.md b/๊ณต์œ /๋Œ€ํ™”๋กœ๊ทธ/์กฐ์ง์šด์˜/2026-05-08.md new file mode 100644 index 0000000..b797591 --- /dev/null +++ b/๊ณต์œ /๋Œ€ํ™”๋กœ๊ทธ/์กฐ์ง์šด์˜/2026-05-08.md @@ -0,0 +1,106 @@ +# ์กฐ์ง์šด์˜ ๋Œ€ํ™”๋กœ๊ทธ โ€” 2026-05-08 + +--- + +## ์—”ํŠธ๋ฆฌ 1. ์ง์ „ ์„ธ์…˜ (BT5-Dev BT63~BT109) ๋ˆ„๋ฝ ์ •์ • B์•ˆ ์ง‘ํ–‰ + +**์‹œ๊ฐ**: 2026-05-08 +**์ฃผ์ฒด**: ์ด๊ด„PM +**์˜์—ญ**: ์กฐ์ง SOT ๋ˆ„๋ฝ ์ •์ • โ€” ์กฐ์ง์šด์˜ ๋กœ๊ทธ ์‹ ์„ค + ์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ v2 ๊ฐฑ์‹  + ํ—Œ๋ฒ•๊ธ‰ feedback ์‹ ์„ค +**์œ ํ˜•**: PD ๊ฒฐ์ • (B์•ˆ) + ๋ณธ PM ์ง์ ‘ ์ง‘ํ–‰ + +### ๋ฐฐ๊ฒฝ + +์ง์ „ ์„ธ์…˜ (2026-05-08 BT5-Dev BT63~BT109 ๋ฐœํŒยท๋ชฌ์Šคํ„ฐ ์‹œ์Šคํ…œ) ์ข…๊ฒฐ ์‹œ์ ์— PD ๋ช…์‹œ "์ด์ „ ์„ธ์…˜์—์„œ ๋ˆ„๋ฝ๋œ ๋‚ด์šฉ์ด ๋” ์žˆ๋‹ค โ€” ๊ณต์œ  ๋ˆ„๋ฝ ์ฒดํฌ". ๋ณธ PM์ด ์กฐ์ง ์ฐจ์› SOT 4์˜์—ญ ์ง์ ‘ ์ ๊ฒ€: + +| # | ์˜์—ญ | ๊ฒฐ๊ณผ | +|---|------|------| +| 1 | `๊ณต์œ /๋Œ€ํ™”๋กœ๊ทธ/์กฐ์ง์šด์˜/2026-05-08.md` | โŒ ๋ถ€์žฌ โ€” ๋ณธ ์—”ํŠธ๋ฆฌ๋กœ ์‹ ์„ค | +| 2 | ์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ v2 ๊ฐฑ์‹  | โŒ v1 ๊ณ ์ • โ€” ๋ณธ ์„ธ์…˜ v2 ๊ฐฑ์‹  | +| 3 | ํ—Œ๋ฒ•๊ธ‰ feedback ์‹ ์„ค | โš ๏ธ ๊ฒ€ํ†  ํ•„์š” โ€” ๋ณธ ์„ธ์…˜ ์‹ ์„ค | +| 4 | ๋ฐฉํ–ฅ์ „ํ™˜ ํžˆ์Šคํ† ๋ฆฌ ์•„์นด์ด๋ธŒ | โœ… ๋“ฑ๋ก ์˜๋ฌด X (์ฝ”๋“œ ๋ณ€๊ฒฝ ์˜์—ญ) | + +PD ๊ฒฐ์ •: **B์•ˆ (1ยท2ยท3 ์ผ๊ด„ ์ง‘ํ–‰)**. + +### ์ง์ „ ์„ธ์…˜ ํ•ต์‹ฌ ์˜์—ญ ์š”์•ฝ + +#### ๋ฐœํŒ ์‹œ์Šคํ…œ ์˜๊ตฌ ๋งˆ๋ฌด๋ฆฌ (BT47~BT75 ยท 28ํšŒ+ ๊ฐ€์„ค ๋ˆ„์ ) + +๋ณธ PM ๊ฐ€์„ค ๋ˆ„์  ์‹œ๋„: +- DistanceยทBoundsยทVisualBounds ์ธก์ • (BT14ยทBT15ยทBT16) +- PlatformEffector2D ์ฑ„ํƒ ์‹œ๋„ (BT20~BT26) +- STOMP_MIN_DYยทqueriesHitTriggers ๋ณ€์ˆ˜ ์กฐ์ • + +PD ๋ช…์‹œ ์ง„๋‹จ: +- BT47: "Foreground = Grid โ†’ Foreground ๋ฐฐ๊ฒฝ ์˜๋„" (PD ๊ทผ๋ณธ ์ •์ •) +- BT48: "๋ฐœํŒ์€ ์œ„์— ์„ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•ด" +- BT63: "BT63 = ๊ธฐ๋ณธ ์ƒํƒœ" +- BT66 (R2): **"R2๋กœ ์ง„ํ–‰ํ•ด์ค˜"** โ†’ AutoForeground ๋ถ„๋ฆฌ ์ฑ„ํƒ โ†’ ์˜๊ตฌ ๋งˆ๋ฌด๋ฆฌ ๋„๋‹ฌ + +์˜๊ตฌ ์ฑ„ํƒ ํŒจํ„ด: Drop-Through Platform ํ‘œ์ค€ ํŒจํ„ด (Layer 16 + Raycast + dropThroughTimer + jumpAscentTimer). + +#### ๋ชฌ์Šคํ„ฐ ์‹œ์Šคํ…œ (BT76~BT109 ยท 23ํšŒ+ ๊ฐ€์„ค ๋ˆ„์ ) + +๋ณธ PM ๊ฐ€์„ค ๋ˆ„์  ์‹œ๋„: +- ์ˆ˜ํ‰ยท์ˆ˜์ง Raycast (BT83ยทBT84ยทBT85ยทBT90 ํ๊ธฐ) +- ์ ˆ๋ฒฝ ๊ฑฐ๋ฆฌ ๊ธฐ์ค€ (BT86ยทBT87ยทBT91ยทBT92 ๋ณ€๊ฒฝ 4ํšŒ) +- waitTimerยทphase cooldownยทstuckTimer ์กฐํ•ฉ (BT88~BT94) +- PatrolPath path 12๊ฑด (BT95 PD "PatrolPath ์ œ๊ฑฐ" ๋ช…์‹œ) +- EnemyWall Layer 18 ํˆฌ๋ช…๋ฒฝ (BT99~BT101 ํ๊ธฐ) +- y ์˜์—ญ ์˜๊ตฌ ๊ณ ์ • (BT106 ํ๊ธฐ โ€” ๊ณต์ค‘ ๋ถ€์œ  ์›์ธ) +- Capsule margin 0.1ยท0.5ยท2.0 ๋ณ€๊ฒฝ (BT103ยทBT104ยทBT105) + +PD ๋ช…์‹œ ์ง„๋‹จ: +- BT95: "PatrolPath ์ œ๊ฑฐ" +- BT102: "ํˆฌ๋ช…๋ฒฝ ์‚ญ์ œ" +- BT107 (๊ทผ๋ณธ ์ง„๋‹จ): **"์ ˆ๋ฒฝ ์ฒดํฌ ๋กœ์ง ์ž˜๋ชป์ด ๊ทผ๋ณธ ์›์ธ"** โ†’ Tilemap cell ๊ธฐ๋ฐ˜ ์ธก์ • ์žฌ์„ค๊ณ„ โ†’ ์˜๊ตฌ ๋งˆ๋ฌด๋ฆฌ ๋„๋‹ฌ + +์˜๊ตฌ ์ฑ„ํƒ ํŒจํ„ด: `Tilemap.WorldToCell + HasTile` data ์ง์ ‘ ์‚ฌ์šฉ + footPos cell ์˜์—ญ (`bounds.min.y - 0.5f`). + +### ๋ณธ PM ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ ํŒจํ„ด (์กฐ์ง ์ฐจ์› ๋…ธํ•˜์šฐ) + +๋ณธ PM 28+23ํšŒ = **51ํšŒ+ ๋ˆ„์  ๊ฐ€์„ค ๋ถ€์ •ํ™• ์ž์ธ** + PD ์‹œ๊ฐ ๊ฒ€์ฆ ๋ฐ˜๋ณต ๋ถ€๋‹ด. ํ•ต์‹ฌ ํŒจํ„ด ๋ฐœ๊ฒฌ: + +1. **๋ณธ PM ๊ฐ€์„ค 3ํšŒ ์ด์ƒ ๋ˆ„์  ์‹œ์ ๋ถ€ํ„ฐ ๋™์ผ ์ธก์ • ์˜์—ญ ๋ณ€์ˆ˜๋งŒ ๋ฏธ์„ธ ์กฐ์ •** (Raycast ๊ฑฐ๋ฆฌยทtimer ๊ฐ’ยทmargin ์ˆ˜์น˜). ์ธก์ • ์˜์—ญ ์ž์ฒด ๋ถ€์ •ํ™• ๊ฐ€์ • ๋ฏธ์ง„์ž…. +2. **PD ์ง์ ‘ ์ง„๋‹จ ๋ช…์‹œ ์‹œ์  = ์ฆ‰์‹œ ์˜๊ตฌ ๋งˆ๋ฌด๋ฆฌ ๋„๋‹ฌ** (R2ยทPatrolPath ์ œ๊ฑฐยทํˆฌ๋ช…๋ฒฝ ์‚ญ์ œยท์ ˆ๋ฒฝ ์ฒดํฌ ๊ทผ๋ณธ ์›์ธ 4๊ฑด ๋ชจ๋‘ ๋™์ผ ํŒจํ„ด). +3. **๋ณธ PM์ด PD ์ง„๋‹จ์„ ๊ฐ€์„ค 1๊ฐœ ์˜ต์…˜์œผ๋กœ ๊ฒฉํ•˜์‹œ์ผœ ๋ถ€๋ถ„ ์ฑ„ํƒ ๋ˆ„์ ** = PD ๊ทผ๋ณธ ์ง„๋‹จ ์œ„๊ณ„ ์ธ์‹ ๊ฒฐ์†. + +โ†’ **ํ—Œ๋ฒ•๊ธ‰ feedback `feedback_pm_root_diagnosis_priority` ์‹ ์„ค ์ •ํ•ฉ** (๋ณธ ์—”ํŠธ๋ฆฌ ์‚ฐ์ถœ๋ฌผ ยง1). + +### ๊ฒฐ์ •ยท๊ทผ๊ฑฐยท์˜ํ–ฅ + +#### B์•ˆ ์ฑ„ํƒ ๊ทผ๊ฑฐ + +- **#1 ์กฐ์ง์šด์˜ ๋กœ๊ทธ ๋ถ€์žฌ**: ๋ณธ ์—”ํŠธ๋ฆฌ๋กœ ์‹ ์„ค. ํ–ฅํ›„ ์กฐ์ง ์ฐจ์› ๋…ธํ•˜์šฐ SOT ์ •ํ•ฉ. +- **#2 ์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ v2 ๊ฐฑ์‹ **: ๋ณธ ์„ธ์…˜ 7์ข… ๋…ธํ•˜์šฐ (Tilemap cellยทbody+transform ๋™์‹œยทbody.simulatedยทAutoForeground ๋ถ„๋ฆฌยท์ด๋ฒคํŠธ ์‹œ์ ยทDrop-ThroughยทPM ๊ฐ€์„ค ํŒจํ„ด) `๊ฐœ๋ฐœ_ํด๋ผ์ด์–ธํŠธํŒ€์žฅ_v1.md` v2 ์ถ”๊ฐ€. +- **#3 ํ—Œ๋ฒ•๊ธ‰ feedback ์‹ ์„ค**: `feedback_pm_solution_proactive_proposal` (๋Šฅ๋™ ์ œ์•ˆ ์˜์—ญ) ์™ธ์—ฐ ๋ถ„๋ฆฌ + `feedback_pm_root_diagnosis_priority` (PM ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์‹œ PD ๊ทผ๋ณธ ์ง„๋‹จ ์šฐ์„  ์ฑ„ํƒ) ์‹ ์„ค. + +#### ์˜ํ–ฅ + +- **์ฐจ๊ธฐ BT5-Dev ์ข์€ ์˜์—ญ Enemy ์ž”์—ฌ ์˜์—ญ**: ๋ณธ PM ๊ฐ€์„ค 3ํšŒ+ ๋ˆ„์  ์‹œ์  = ๊ฐ€์„ค ์ƒ์‚ฐ ์ค‘๋‹จ + PD ๊ทผ๋ณธ ์ง„๋‹จ ๋Šฅ๋™ ์ˆ˜๋ น ์˜๋ฌด (ํ—Œ๋ฒ•๊ธ‰ feedback ์ •ํ•ฉ). +- **์ฐจ๊ธฐ ํ”„๋กœ์ ํŠธ**: ์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ v2 = Unity ์ธก์ • ์ž๋ฃŒ ์นดํƒˆ๋กœ๊ทธ + ํ‘œ์ค€ ํŒจํ„ด ๋ณด์œ . ์‹ ๊ทœ ํด๋ผ์ด์–ธํŠธํŒ€์žฅ ์ธ์ˆ˜์ธ๊ณ„ ์ž๋ฃŒ. +- **๋ณธ PM ๋Šฅ๋™ ๋ณด์œ  ์˜๋ฌด**: TilemapยทPhysics2DยทBoundsยทKinematicObjectยทRigidbody2Dยท์ด๋ฒคํŠธ ์‹œ์  ์˜์—ญ๋ณ„ ์ •ํ•ฉ ์นดํƒˆ๋กœ๊ทธ. + +### ์‚ฐ์ถœ๋ฌผ + +- `memory/org/feedback_pm_root_diagnosis_priority.md` (์‹ ์„ค โ€” ํ—Œ๋ฒ•๊ธ‰ feedback) +- `memory/MEMORY.md` (์ธ๋ฑ์Šค ๊ฐฑ์‹  โ€” ์‹ ๊ทœ feedback ๋“ฑ๋ก) +- `๊ณต์œ /์กฐ์ง์ž์‚ฐ/์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ/๊ฐœ๋ฐœ_ํด๋ผ์ด์–ธํŠธํŒ€์žฅ_v1.md` (v2 ๊ฐฑ์‹  โ€” ยง6 EerieVillage BT5-Dev ์˜์—ญ ์‹ ๊ทœ ๋…ธํ•˜์šฐ 7์ข… ์ถ”๊ฐ€, ยง7 PM ๋ณด๊ณ  ์•ˆ๊ฑด ์ถ”๊ฐ€) +- `๊ณต์œ /๋Œ€ํ™”๋กœ๊ทธ/์กฐ์ง์šด์˜/2026-05-08.md` (๋ณธ ์—”ํŠธ๋ฆฌ) + +### ๊ด€๋ จ ๊ทœ์น™ยท์ž์‚ฐ + +- **C2** ๊ทผ์›์  ๋ฌธ์ œ ํ•ด๊ฒฐ (proxy ๊ฐœ์„  ํ๊ธฐยท๊ทผ๋ณธ ํ•ด๊ฒฐ์•ˆ ์šฐ์„ ) +- **C5ยทC23ยทC44** ์ •์ง์„ฑ (51ํšŒ+ ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ) +- **C36** PM ์ž์œจ ํŒ๋‹จ ๋ฒ”์œ„ ์ƒํ•œ +- **C45** ํ•˜๋“œ๋ณด์ผ๋“œ ๊ณต๊ฐ (PD ๋ถ€๋‹ด ์˜์—ญ ๋ณธ PM ํก์ˆ˜) +- `feedback_pm_solution_proactive_proposal` (์ง์ „ ์„ธ์…˜ ์‹ ์„ค โ€” ๋Šฅ๋™ ์ œ์•ˆ ์˜๋ฌด) +- `feedback_pm_root_diagnosis_priority` (๋ณธ ์„ธ์…˜ ์‹ ์„ค โ€” PD ๊ทผ๋ณธ ์ง„๋‹จ ์šฐ์„  ์ฑ„ํƒ) +- `feedback_pm_excessive_decision_request` (์˜ต์…˜ ๋‚˜์—ด ํ๊ธฐ) +- `feedback_pm_mcp_direct_implementation` (์ง์ ‘ ๊ตฌํ˜„ ์˜๋ฌด) + +### ํ›„์† ์˜์—ญ + +- **์ฆ‰์‹œ ํ›„์†**: PD ๋‹ค์Œ ์ง€์‹œ ์ˆ˜๋ น โ€” BT5-Dev ์ข์€ ์˜์—ญ Enemy ์ž”์—ฌ / BT7-Dev VS ์ˆœ์ˆ˜ํ˜• / BT7-Plan ์นด๋“œ ์‹œ์Šคํ…œ / ์ƒˆ ๊ฒŒ์ž„์„ฑ ์˜์—ญ ์ค‘ PD ๊ฒฐ์ •. +- **์ฐจ๊ธฐ ์‚ฌ์ดํด**: ๋ณธ PM ๊ฐ€์„ค 3ํšŒ+ ๋ˆ„์  ์ž์ธ ์‹œ์ ๋ถ€ํ„ฐ ๊ฐ€์„ค ์ƒ์‚ฐ ์ค‘๋‹จ + PD ๊ทผ๋ณธ ์ง„๋‹จ ๋Šฅ๋™ ์ˆ˜๋ น ์ž๊ธฐ๊ฒ€์ฆ ์˜๋ฌด (ํ—Œ๋ฒ•๊ธ‰ feedback ์ •ํ•ฉ). +- **paths.local.json ์…‹ํŒ…**: ๋ณธ worktree ๋ถ€์žฌ โ€” Unity ์™ธ๋ถ€ ๋ ˆํฌ ์ง์ ‘ ์ž‘์—… ์‹œ PD PC ๊ฒฝ๋กœ ๋ช…์‹œ ์˜๋ฌด. diff --git a/๊ณต์œ /์กฐ์ง์ž์‚ฐ/์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ/๊ฐœ๋ฐœ_ํด๋ผ์ด์–ธํŠธํŒ€์žฅ_v1.md b/๊ณต์œ /์กฐ์ง์ž์‚ฐ/์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ/๊ฐœ๋ฐœ_ํด๋ผ์ด์–ธํŠธํŒ€์žฅ_v1.md index e087ba2..b1ae5f8 100644 --- a/๊ณต์œ /์กฐ์ง์ž์‚ฐ/์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ/๊ฐœ๋ฐœ_ํด๋ผ์ด์–ธํŠธํŒ€์žฅ_v1.md +++ b/๊ณต์œ /์กฐ์ง์ž์‚ฐ/์‹œํ–‰์ฐฉ์˜ค_์•„์นด์ด๋ธŒ/๊ฐœ๋ฐœ_ํด๋ผ์ด์–ธํŠธํŒ€์žฅ_v1.md @@ -1,9 +1,10 @@ -# ํด๋ผ์ด์–ธํŠธํŒ€์žฅ ์‹œํ–‰์ฐฉ์˜ค ์•„์นด์ด๋ธŒ v1 +# ํด๋ผ์ด์–ธํŠธํŒ€์žฅ ์‹œํ–‰์ฐฉ์˜ค ์•„์นด์ด๋ธŒ v2 > **์กฐ์ง**: BurningTimes (๊ตฌ NerdNavis ๊ณ„์Šน) > **๋‹ด๋‹น**: ํด๋ผ์ด์–ธํŠธํŒ€์žฅ > **๋Œ€์ƒ ์›๋ณธ**: ์ˆ˜์ƒํ•œ์žกํ™”์  (Unity `6000.0.67f1`, ์™ธ๋ถ€ ๋ ˆํฌ `FilGoodBandits/DeckBuilding`) > **๊ณ„์Šน ๋Œ€์ƒ**: EerieVillage (Unity `6000.3.13f1 LTS`, 2D PlatformerMicrogame ํ…œํ”Œ๋ฆฟ) +> **v2 ๊ฐฑ์‹  (2026-05-08)**: ยง6 EerieVillage BT5-Dev ์˜์—ญ ์‹ ๊ทœ ๋…ธํ•˜์šฐ 7์ข… ์ถ”๊ฐ€ (๋ฐœํŒ ์‹œ์Šคํ…œ BT47~BT75 + ๋ชฌ์Šคํ„ฐ ์‹œ์Šคํ…œ BT76~BT109) --- @@ -118,3 +119,78 @@ - `ํ”„๋กœ์ ํŠธ/์ฝ”์–ดํ”„๋ ˆ์ž„์›Œํฌ/01_์•„ํ‚คํ…์ฒ˜_๊ฐœ์š”_v1.md`ยท`03_๋ฐฐํฌ๋ฐฉ์‹_์•ˆ๊ฑด_v1.md`ยท`04_Tier1_3์ข…_์ƒํ˜ธ์ž‘์šฉ_์„ค๊ณ„_v1.md` **๋Œ€ํ™”๋กœ๊ทธ**: `๊ณต์œ /๋Œ€ํ™”๋กœ๊ทธ/์ฝ”์–ดํ”„๋ ˆ์ž„์›Œํฌ/2026-04-16.md`ยท`2026-04-17.md`ยท`2026-04-18.md` + +--- + +## 6. EerieVillage BT5-Dev ์˜์—ญ ์‹ ๊ทœ ๋…ธํ•˜์šฐ (v2 ์ถ”๊ฐ€, 2026-05-08) + +> **๋Œ€์ƒ**: BT5-Dev ๋ฐœํŒ ์‹œ์Šคํ…œ (BT47~BT75) + ๋ชฌ์Šคํ„ฐ ์‹œ์Šคํ…œ (BT76~BT109) +> **๊ณ„๊ธฐ**: ๋ณธ PM ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ 28+23ํšŒ ๋ˆ„์  โ†’ PD ๊ทผ๋ณธ ์ง„๋‹จ ์ฑ„ํƒ ํ›„ ์˜๊ตฌ ๋งˆ๋ฌด๋ฆฌ ๋„๋‹ฌ +> **์—ฐ๊ด€ ํ—Œ๋ฒ•๊ธ‰ feedback**: `feedback_pm_root_diagnosis_priority` (2026-05-08 ์‹ ์„ค) + +### 6-1. Tilemap cell ๊ธฐ๋ฐ˜ ์ธก์ • (Raycast ๋ถ€์ •ํ™• ํ๊ธฐ) + +| ์‹œ๋„ | ์ด์œ  | ๊ฒฐ๊ณผ | ๊ตํ›ˆ | +|------|------|------|------| +| ์ˆ˜ํ‰ยท์ˆ˜์ง Raycast ์ธก์ • (BT80~BT106) | ์ ˆ๋ฒฝยท๋ฒฝ ๊ฒ€์ถœ | spriteยทcollider ์˜์—ญ ์˜์กด ๋ถ€์ •ํ™• ๋ˆ„์  23ํšŒ+ | Raycast ์˜์—ญ = spriteยทcollider ์ •ํ•ฉ ํ•„์ˆ˜. ๋ฏธ์ •ํ•ฉ ์‹œ ๋ถ€์ •ํ™• | +| `Tilemap.WorldToCell` + `HasTile` (BT107) | data ์ง์ ‘ ์‚ฌ์šฉ | PD ๊ทผ๋ณธ ์ง„๋‹จ ์ฑ„ํƒ ์ฆ‰์‹œ ์˜๊ตฌ ๋งˆ๋ฌด๋ฆฌ ๋„๋‹ฌ | **Tilemap data ์ง์ ‘ ์‚ฌ์šฉ = ์ •ํ™•. ์ ˆ๋ฒฝยท๋ฒฝ ๊ฒ€์ถœ 1์ˆœ์œ„** | +| footPos cell ์˜์—ญ (BT109) | Capsule ๋ฐœ ์œ„์น˜ ์ •ํ•ฉ | `footPos.y = bounds.min.y - 0.5f` = ๋ฐœํŒ cell ์˜์—ญ ์ •ํ™• | ๋ฐœ ์ž์ฒด cell โ‰  ๋ฐœํŒ cell. -0.5f ์˜คํ”„์…‹ ์˜๋ฌด | + +### 6-2. KinematicObject bodyยทtransform ๋™์‹œ set ์˜๋ฌด + +| ์‹œ๋„ | ์ด์œ  | ๊ฒฐ๊ณผ | ๊ตํ›ˆ | +|------|------|------|------| +| `transform.position` ๋‹จ๋… set (BT89~BT92) | ์ฆ‰์‹œ ์œ„์น˜ ๋ณ€๊ฒฝ | KinematicObject `body.position` ๋ฏธ๋™๊ธฐํ™” โ†’ 1 frame ํ›„ ์›์œ„์น˜ ๋ณต๊ท€ | transform ๋‹จ๋… set ์˜์—ญ = KinematicObject ์˜์—ญ ๋ถ€์ •ํ•ฉ | +| `body.position` + `transform.position` ๋™์‹œ set (BT93ยทBT96) | ์–‘ ์˜์—ญ ๋™๊ธฐ | TriggerReverse ์˜์—ญ ์ •ํ•ฉ | **transform + body ๋™์‹œ set ์˜๋ฌด** | +| `velocity.x` ์ง์ ‘ set | ์ฆ‰์‹œ ๋ฐฉํ–ฅ ์ „ํ™˜ | FixedUpdate ์˜์—ญ = `velocity.x = targetVelocity.x` ๋ฎ์–ด์”€ โ†’ 1 frame๋งŒ ์˜ํ–ฅ | `control.move.x` ์˜์—ญ๊ณผ ๋™์‹œ set ์˜๋ฌด | + +### 6-3. body.simulated = false (์ œ์ž๋ฆฌ ์‚ฌ๋ง ์˜์—ญ) + +| ์‹œ๋„ | ์ด์œ  | ๊ฒฐ๊ณผ | ๊ตํ›ˆ | +|------|------|------|------| +| `_collider.enabled = false` ๋‹จ๋… (BT104) | ์ถฉ๋Œ ์ฐจ๋‹จ | gravity ์ ์šฉ โ†’ ๋–จ์–ด์ง | collider๋งŒ ์ฐจ๋‹จ ์‹œ ๋ฌผ๋ฆฌ ์˜์—ญ ์ž”์กด | +| `body.simulated = false` (BT105) | ๋ฌผ๋ฆฌ ์˜์—ญ ์ „์ˆ˜ ์ฐจ๋‹จ | gravity Xยท์ถฉ๋Œ Xยท์ œ์ž๋ฆฌ ์‚ฌ๋ง ์ •ํ•ฉ | **์ฃฝ์€ Enemy ์ œ์ž๋ฆฌ ์‚ฌ๋ง ์˜์—ญ = body.simulated=false** | + +### 6-4. AutoForeground vs PD Foreground ์˜์—ญ ๋ถ„๋ฆฌ + +| ์‹œ๋„ | ์ด์œ  | ๊ฒฐ๊ณผ | ๊ตํ›ˆ | +|------|------|------|------| +| Foreground TilemapCollider ๋ถ€์ฐฉ (BT82) | ๋ฐœํŒ ์ถฉ๋Œ | PD Foreground = ์‹œ๊ฐ๋งŒ ์˜๋„. ํ†ต๋กœ ๋ง‰ํž˜ | PD๊ฐ€ ์ง์ ‘ ๊ทธ๋ฆฐ ์‹œ๊ฐ ์˜์—ญ = ์ถฉ๋Œ X ์˜๋„ | +| AutoForeground ์‹ ๊ทœ GameObject (BT47 R2 ์ฑ„ํƒ) | ์ž๋™ ๋ถ„๋ฅ˜ ๊ฒฐ๊ณผ ๋ณ„๋„ ๋ถ„๋ฆฌ | Grid ์ž์‹ยทTilemapยทTilemapColliderยทLayer 16ยทtransform ๋™๊ธฐํ™” | **์‹œ๊ฐ ์˜๋„ โ†” ์ถฉ๋Œ ์˜์—ญ ๋ถ„๋ฆฌ. AutoForeground = ์ž๋™ ๋ถ„๋ฅ˜ ๊ฒฐ๊ณผ๋งŒ ์ถฉ๋Œ** | + +### 6-5. ์ธก์ • ์‹œ์  โ€” Awake < AfterSceneLoad < Start + +| ์‹œ๋„ | ์ด์œ  | ๊ฒฐ๊ณผ | ๊ตํ›ˆ | +|------|------|------|------| +| Awake ์‹œ์  ์ธก์ • (BT94 ์‹œ๋„) | ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ์  | AutoForeground Tile data ๋ฏธํ™œ์„ฑ โ†’ ์ธก์ • ๋ถ€์ •ํ™• | Awake = scene ์ „์ˆ˜ ํ™œ์„ฑ ์ „ | +| `RuntimeInitializeOnLoadMethod(AfterSceneLoad)` ์˜์—ญ | scene load ํ›„ | AutoForeground ๋ถ„๋ฅ˜ ํ›„ ์‹œ์  | AfterSceneLoad = Awake ํ›„ยทStart ์ „ | +| Start ์‹œ์  ์ธก์ • (BT97) | AutoForeground ๋ถ„๋ฅ˜ ์™„๋ฃŒ ํ›„ | Tile data ํ™œ์„ฑ ์˜์—ญ ์ธก์ • ์ •ํ•ฉ | **AutoForegroundยทTilemap data ์˜์กด ์ธก์ • = Start ์‹œ์  ์˜๋ฌด** | + +### 6-6. Drop-Through Platform ํ‘œ์ค€ ํŒจํ„ด (๋ฐœํŒ ์‹œ์Šคํ…œ ์˜๊ตฌ ์ฑ„ํƒ) + +| ์˜์—ญ | ๋™์ž‘ | ๊ตํ›ˆ | +|------|------|------| +| `JUMP_THROUGH_LAYER = 16` | AutoForegroundยทForeground ํ†ต๊ณผ ๋Œ€์ƒ Layer | Layer ๊ธฐ๋ฐ˜ mask ์ œ์–ด ํ‘œ์ค€ | +| `dropThroughTimer (0.3์ดˆ)` | Down + Jump ์ž…๋ ฅ ์‹œ Layer 16 mask ๊ฐ•์ œ OFF | ์ผ์‹œ mask OFF ํŒจํ„ด | +| `jumpAscentTimer (0.4์ดˆ)` | ์ ํ”„ ascendingยท์ •์  ์˜์—ญ mask ๊ฐ•์ œ OFF | jitter ์ฐจ๋‹จ ์˜๋ฌด | +| `dropThroughJump` | `velocity.y = -0.5f` (์ฆ‰์‹œ ๋‚™ํ•˜ยทIsGrounded=false ํ™•๋ณด) | ์ฆ‰์‹œ ํšจ๊ณผ ์˜๋ฌด | +| `UpdateContactFilterForDropThrough` | ascendingยท์ •์ ยทTimer ํ™œ์„ฑ ์‹œ mask OFF / footHit 3์  Raycast | ๋ฐœํŒ ์œ„ ๊ฒ€์ถœ ์•ˆ์ •ํ™” | +| ๋ฐ€๋ฆผ ๊ฐ•์ œ Drop-Through | ์ ํ”„ยท๋‚™ํ•˜ ์ค‘ + ์ˆ˜ํ‰ ์ž…๋ ฅ + ๋ฐœํŒ ๊ฐ€์žฅ์ž๋ฆฌ ์ผ์‹œ ๊ฒ€์ถœ โ†’ `dropThroughTimer` ๊ฐ•์ œ ํ™œ์„ฑ | ๊ฐ€์žฅ์ž๋ฆฌ jitter ์ฐจ๋‹จ | +| Down + Jump ๋ฐœ๋™ ์กฐ๊ฑด | ๋ฐœํŒ(Layer 16) ์œ„ footHit ๊ฒ€์ถœ ์‹œ๋งŒ (์ง€๋ฉด ์œ„ = ์ผ๋ฐ˜ ์ ํ”„) | ๋ถ„๊ธฐ ์˜๋ฌด | + +### 6-7. PM ๊ฐ€์„ค ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ ํŒจํ„ด (๋ฉ”ํƒ€ ์˜์—ญ) + +| ์‚ฌ์ดํด | ๋ณธ PM ๊ฐ€์„ค ๋ˆ„์  | PD ๊ทผ๋ณธ ์ง„๋‹จ ๋ช…์‹œ ์‹œ์  | ์ฆ‰์‹œ ์ •ํ•ฉ ๋„๋‹ฌ | +|--------|---------------|---------------------|--------------| +| ๋ฐœํŒ ์‹œ์Šคํ…œ (BT47~BT75) | 28ํšŒ+ ๊ฐ€์„ค (DistanceยทBoundsยทVisualBoundsยทPlatformEffectorยทSTOMP_MIN_DY ๋“ฑ) | PD: "R2๋กœ ์ง„ํ–‰ํ•ด์ค˜" (BT66) | AutoForeground ๋ถ„๋ฆฌ ์ฑ„ํƒ | +| ๋ชฌ์Šคํ„ฐ ์ž๋™ patrol (BT80~BT109) | 23ํšŒ+ ๊ฐ€์„ค (์ˆ˜ํ‰ RaycastยทwaitTimerยทstuckTimerยทEnemyWallยทy ์˜์—ญ ๊ณ ์ • ๋“ฑ) | PD: "์ ˆ๋ฒฝ ์ฒดํฌ ๋กœ์ง ์ž˜๋ชป์ด ๊ทผ๋ณธ ์›์ธ" (BT107) | Tilemap cell ๊ธฐ๋ฐ˜ ์ธก์ • ์žฌ์„ค๊ณ„ | +| ํ•ต์‹ฌ PD ๋ช…์‹œ ์ง„๋‹จ 4๊ฑด | "R2 ์ง„ํ–‰"ยท"PatrolPath ์ œ๊ฑฐ"ยท"ํˆฌ๋ช…๋ฒฝ ์‚ญ์ œ"ยท"์ ˆ๋ฒฝ ์ฒดํฌ ๊ทผ๋ณธ ์›์ธ" | ๋งค๋ฒˆ ๋ณธ PM ๊ฐ€์„ค 3ํšŒ+ ๋ˆ„์  ํ›„ ๋ช…์‹œ | ์ฆ‰์‹œ ์˜๊ตฌ ๋งˆ๋ฌด๋ฆฌ ๋„๋‹ฌ ํŒจํ„ด ๋ฐ˜๋ณต | + +**ํ•ต์‹ฌ ๊ตํ›ˆ**: ๋ณธ PM ๊ฐ€์„ค 3ํšŒ ์ด์ƒ ๋ˆ„์  ๋ถ€์ •ํ™• ์ž์ธ ์‹œ์  = **๊ฐ€์„ค ์ƒ์‚ฐ ์ฆ‰์‹œ ์ค‘๋‹จ + PD ๊ทผ๋ณธ ์ง„๋‹จ ๋Šฅ๋™ ์ˆ˜๋ น ์˜๋ฌด**. ํ—Œ๋ฒ•๊ธ‰ feedback `feedback_pm_root_diagnosis_priority` ์ •ํ•ฉ. + +--- + +## 7. v2 ์ถ”๊ฐ€ PM ๋ณด๊ณ  ์•ˆ๊ฑด + +- **BT5-Dev ์ข์€ ์˜์—ญ Enemy ์ž”์—ฌ**: PD ๋ณด๊ณ  (BT109 ํ›„) "๋ชฌ์Šคํ„ฐ๋“ค ์ค‘ ์ผ๋ถ€(์ด๋™ ๊ฐ€๋Šฅ ์˜์—ญ์ด ์ข์€ ๊ฒฝ์šฐ)๋ฅผ ์ œ์™ธํ•˜๋ฉด ๋‚ด๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ์›€์ง์ด๊ณ  ์žˆ์–ด". ์ข์€ ์˜์—ญ (์‹œ์ž‘ ์œ„์น˜ โ†” ์ ˆ๋ฒฝ ๊ฑฐ๋ฆฌ ๋งค์šฐ ์ž‘์Œ) ํŒจํ„ด ๋ถ€์ •ํ•ฉ ์ž”์กด. PD ์žฌ์š”์ฒญ ์‹œ ๋ณธ PM ํ›„์†. +- **Unity ์ธก์ • ์ž๋ฃŒ ์นดํƒˆ๋กœ๊ทธ ๋ณด์œ  ์˜๋ฌด**: TilemapยทPhysics2DยทBoundsยทKinematicObjectยทRigidbody2Dยท์ด๋ฒคํŠธ ์‹œ์  ์˜์—ญ๋ณ„ ์ •ํ•ฉ ์นดํƒˆ๋กœ๊ทธ ๋ณธ PM ๋Šฅ๋™ ๋ณด์œ  ์˜๋ฌด (`feedback_pm_root_diagnosis_priority` ยง3 ์ •ํ•ฉ)