BurningTimesAi/공유/대화로그/EerieVillage/2026-05-08.md

17 KiB
Raw Blame History

EerieVillage 대화로그 — 2026-05-08


엔트리 1. BT5-Dev 발판 시스템 영구 마무리 (BT63~BT75)

시각: 2026-05-08 주체: 총괄PM 영역: BT5-Dev Phase 3 파일럿 (개발) — 발판 시스템 + 플레이어 조작 유형: PD 시각 검증 반복 + 본 PM 누적 가설 부정확 자인 후 PD 명시 영역 회귀 + 영구 채택

배경

BT5-Dev 발판 시스템 영역 (BT47~BT74)은 PD 시각 검증 반복 + 본 PM 가설 17회 누적 부정확 자인 후 R2 (AutoForeground 분리) 채택으로 PD 의도 정합 영역 도달. 본 엔트리는 BT75 영구 마무리 commit으로 시행착오 주석 정리 + dead code 제거 + PD 명시 채택 영역 결과 보고.

영구 채택 영역

1. GameOptimizer.cs — Foreground 분리 + 자동 분류

단계 동작
Init Layer Matrix Player(13) ↔ Enemy(14) 충돌 OFF
SetupJumpThroughPlatforms Level Tilemap = Layer 0 (지면·벽 영구 충돌) / 그 외 비-trigger Collider2D = Layer 16
PD Foreground TilemapCollider2D Object.Destroy → 가림막 시각만 (PD 직접 그린 영역)
AutoForeground (Grid 자식·신규) Tilemap + TilemapRenderer + TilemapCollider2D + Layer 16 자동 부착 + transform.localPosition 동기화
자동 분류 Level → AutoForeground SetTile + Sprite 강제
제외 조건 colliderType=None (tree·plant·fence·house) / 이름 prefix TileGround (지면·벽)
분류 조건 worldY ≥ playerY+1.5 또는 작은 공중 발판 (가로≤8 + 위·아래 빈)

2. PlayerController.cs — Drop-Through 패턴 + 입력 처리

영역 동작
JUMP_THROUGH_LAYER = 16 AutoForeground·Foreground 통과 대상 Layer
dropThroughTimer (0.3초) Down + Jump 입력 시 Layer 16 mask 강제 OFF
jumpAscentTimer (0.4초) 점프 ascending·정점 영역 mask 강제 OFF (jitter 차단)
dropThroughJump Drop-Through 점프 시 velocity.y = -0.5f (즉시 낙하·IsGrounded=false 확보)
UpdateContactFilterForDropThrough ascending·정점·Timer 활성 시 mask OFF / footHit 3점 Raycast (좌·중·우) standingOnPlatform 안정 검출
밀림 강제 Drop-Through 점프·낙하 중 velocity.y > -1.5 + 수평 입력 + 발판 가장자리 일시 검출 → dropThroughTimer 강제 활성
Down + Jump 발동 조건 발판(Layer 16) 위 footHit 검출 시만 (지면 위 = 일반 점프)

3. KinematicObject.cs — 공중 hit X·Y 분리

영역 동작
공중 hit (!IsGrounded) X 이동 hit (앞 벽) = velocity.x = 0만 (점프 속도 보존) / Y 이동 hit (천장) = velocity.x + velocity.y = Mathf.Min(velocity.y, 0)

플레이어 조작 시스템 동작 카탈로그

입력 위치 결과
Jump only 어디서든 일반 점프 (위로)
Jump + 수평 이동 발판 옆 정점 영역 mask 강제 OFF → 깔끔 통과 (jitter 차단)
Jump + 전진 (앞 벽) 지면 velocity.x=0 + velocity.y 보존 → 위로만 점프
Down + Jump 발판 위 Drop-Through (발판 통과 + 점프 모션 + 자연 낙하)
Down + Jump 지면 위 일반 점프 (위로)
점프 ascending 발판 영역 mask OFF → 통과
점프 descending 발판 위 footHit 3점 검출 → standingOnPlatform=true → 착지

Tile asset 분류 카탈로그 (PD 명시 정합)

분류 Tile asset 동작
공중 발판 (자동 분류·Drop-Through) TileFloatingLeftEdge·RightEdge·TileMiddle Layer 16 + Sprite Collider
배경·건물 (자동 분류·Drop-Through) ShortBuilding·TallBuilding·MidgroundFiller·cloud·hillside·midground·mountains Layer 16 + Sprite Collider
지면·벽 (Level 잔존·영구 충돌) TileGround·TileGroundDark·TileGroundTop Layer 0 + Tile asset Grid Collider
배경 (None Tile·자체 통과) tree·plant·fence·house Layer 0 + Tile asset None Collider

시행착오 영역 (정리·git history 영구 보존)

BT49~BT65 영역 누적 변경 17회 = 본 PM 가설 부정확 + PD 시각 검증 반복. R2 (BT66) 채택 후 영구 마무리 도달. 시행착오 commit 영역 git history 그대로 보존 — 본 BT75 = 시행착오 주석·dead code 정리만.

핵심 PD 명시 흐름:

  1. "Foreground = Grid → Foreground 배경 의도" (PD 정정 — 본 PM 근본 오해 자인)
  2. "발판은 위에 설 수 있어야 해" (PD 의도 명시)
  3. "이전 버전처럼 발판 통과·점프 가능" (BT47 정합 회귀 명시)
  4. "BT48로 복귀해봐" (commit hash 직접 명시)
  5. "BT63 = 기본 상태" (PD 정합 인식)
  6. "R2로 진행해줘" (AutoForeground 분리 채택)

잔여 영역 (PD 명시 — 추후 필요 시 재요청)

  • BT74 밀림 강제 Drop-Through 영역 일부 잔존 가능 (PD 시각: "바로 떨구는 것 적용 X 느낌"). PD 명시 = "넘어가고 플레이어 조작 시스템 완성".

산출물

  • Assets/Scripts/Mechanics/GameOptimizer.cs (Write 전체 재작성·시행착오 주석 정리)
  • Assets/Scripts/Mechanics/PlayerController.cs (Edit 부분 정리·Drop-Through 패턴 영구)
  • Assets/Scripts/Mechanics/KinematicObject.cs (Edit 부분 정리·X·Y 분리 영구)
  • EerieVillage commit 2ebacf6 (BT75) — 발판 시스템 영구 마무리

관련 규칙·자산

  • C2 근본 해결 — BT75 시행착오 영역 정리·핵심 영역 보존
  • C5·C23·C44 — 본 PM 17회 가설 부정확 누적 자인 + PD 명시 영역 직접 따름
  • C36 — PD 명시 승인 영역만 변경
  • C18 — 양 git push 정합 (EerieVillage 2ebacf6 + BurningTimes 본 commit)
  • feedback_pm_solution_proactive_proposal — 본 PM 표준 패턴 보유 한계 자인 후 PD 직접 명시 의무
  • feedback_pm_excessive_decision_request — 옵션 명시 + PM 권고 + PD 결정 영역
  • feedback_pm_mcp_direct_implementation — 본 PM Editor.log·Scene yaml·git diff direct read 능동 진단

후속 영역

  • BT5-Dev 발판 시스템 = 완료 영역. 활성 PD 지시 로그 BT5-Dev 영역 갱신 의무.
  • 잔여 영역 (BT74 밀림 일부 잔존) = PD 명시 = 추후 필요 시 재요청 영역.
  • 차기 BT5-Dev 영역 = 다른 메카닉 또는 컨텐츠 영역 (PD 결정).

엔트리 2. BT5-Dev 몬스터 시스템 (BT76~BT109)

시각: 2026-05-08 후반 주체: 총괄PM 영역: BT5-Dev Phase 3 파일럿 (개발) — 몬스터 리소스 교체·자동 patrol·낭떠러지 차단·밟기 처치 유형: PD 시각 검증 반복 + 본 PM 23회 가설 누적 부정확 자인 후 PD 근본 진단 채택 영역 도달

영역 카탈로그

Phase 1 — 몬스터 리소스 교체 (BT76~BT79)

  • BT76: Enemy.prefab SpriteRenderer = M001_idle01 교체
  • BT77: 4개 .anim (Idle·Run·Hurt·Death) sprite reference 영역 M001 순환 매핑 (Python 자동)
  • BT78: M001 sprite fileID 영역 정확 매핑 (Multiple sprite mode internalID·BT76/BT77 정정)
  • BT79: Enemy flipX 영역 PlayerController 정합 (좌측 sprite 기준 우측 이동 시 flipX=true)

Phase 2 — 자동 patrol·절벽 검출 (BT80~BT109)

  • BT80: Enemy y+0.5 + 자동 patrol (생성 위치 ±100~150 random 왕복) + 절벽 검출 (PD 3건 일괄)
  • BT81~BT85: 벽 정지·낭떠러지·flipX·이동속도·미세 밀림 영역 정정 (PD 시각 검증 반복)
  • BT86: 속도 2배 느림 (maxSpeed 7→3.5) + 절벽 즉시 phase 전환
  • BT87: 벽 충돌 즉시 전환·순찰 거리 절반 (50~75)
  • BT88: phase+2 (시작 위치 복귀 폐기·즉시 반대 방향)
  • BT89~BT93: 즉시 벽 검출·1~3초 대기·KinematicObject 정합 (transform+body 동시 push)
  • BT94: phase cooldown 0.5초·시작 시 안전 거리 측정
  • BT95: PatrolPath path 영역 12건 제거·velocity 즉시 반대 방향 (PD 명시)
  • BT96: TriggerReverse 함수 (transform+body+velocity+move 통합 처리)
  • BT97: Start 시점 안전 거리 측정 (AutoForeground Tile data 활성 후)
  • BT98: R1 방어 영역 (발 자체 검사·시작 위치 텔레포트 복귀)
  • BT99~BT101: EnemyWall Layer 18·투명벽 자동 생성 → 폐기 (PD Foreground TilemapCollider 부착·통로 막힘)
  • BT102: 투명벽 폐기·y < startY-1.0 시 시작 위치 텔레포트
  • BT103: 정확 측정 (Capsule 발 영역·0.1m 간격·0.5m margin)
  • BT104: EnemyDeath 강화 (enabled=false·death 애니메이션·1초 Destroy) + 시작 위치 발판 검증·자동 재배치
  • BT105: 제자리 사망 (body.simulated=false) + margin 0.5→2.0m
  • BT106: y 영역 영구 고정 (떨어짐 영구 차단) — 폐기 (BT107 공중 부유 원인)
  • BT107: Tilemap cell 기반 측정 (PD 근본 진단·Raycast 영역 부정확 폐기)
  • BT108: 측정 결과 Debug.Log 진단
  • BT109: footPos cell 영역 정정 (bounds.min.y - 0.5f·발판 cell 정확) + BT104 Raycast 재배치 폐기

영구 채택 영역 (BT109 정합)

EnemyController.cs

  • 자동 patrol 4-phase (우측 random·시작 복귀·좌측 random·시작 복귀)
  • patrolMinRange/patrolMaxRange = 50/75 (Inspector)
  • Tilemap cell 기반 안전 거리 측정 (Start 시점 1회·AfterSceneLoad 후)
  • TriggerReverse 영역 (절벽·벽 검출 시 transform+body+velocity 통합)
  • phase cooldown 1.0초 (BT94 영역)
  • waitTimer 1~3초 random (arrive 시점만)
  • stuckTimer 50ms (벽 정지 fallback·BT90 영역)
  • BT102 텔레포트 영역 (떨어짐 검출 후 시작 위치 복귀·보조 fallback)

EnemyDeath.cs (Gameplay)

  • _collider.enabled = false
  • control.enabled = false
  • enemy.enabled = false (patrol 영역 정지)
  • body.simulated = false (gravity X·제자리 사망)
  • animator.SetTrigger("death")
  • Object.Destroy(gameObject, 1f)

GameOptimizer.cs

  • Init: Physics2D.IgnoreLayerCollision(13, 14, true) — Player ↔ Enemy
  • SetupJumpThroughPlatforms:
    • 모든 비-Level Collider2D Layer 16 강제
    • PD Foreground TilemapCollider Object.Destroy (시각만)
    • AutoForeground 신규 (Grid 자식·Tilemap·TilemapCollider·Layer 16·transform 동기화)
    • Level → AutoForeground 자동 분류 (BT47/BT48 휴리스틱·BT49 None 차단·BT63 TileGround* 차단)
    • 사후 복원 영역 (BT51 None 처리)
    • CliffWalls GameObject Destroy (BT102 영역 폐기 정리)

TagManager.asset

  • Layer 18 = "EnemyWall" (BT99 영역·BT102 폐기 후도 잔존)

잔여 영역 (PD 명시)

PD 보고 (BT109 후): "몬스터들 중 일부(이동 가능 영역이 좁은 경우)를 제외하면 내가 원하는대로 움직이고 있어"

= 좁은 영역 Enemy 영역 잔여 부정합. PD 결정 영역 (재요청 시 본 PM 후속).

본 PM 23회+ 가설 누적 부정확 자인 영역

PD 시각 검증 반복 영역에서 본 PM 측정·검출·재배치 영역 다수 가설 시도. 핵심 PD 명시 채택 시 영구 마무리 도달:

  • "PatrolPath 제거" → BT95
  • "투명벽 삭제" → BT102
  • "절벽 체크 로직 잘못 — 근본 원인" → BT107 Tilemap cell 기반 측정 재설계

산출물

  • Assets/Scripts/Mechanics/EnemyController.cs (자동 patrol·Tilemap cell 측정·death·재배치)
  • Assets/Scripts/Mechanics/AnimationController.cs (BT79 flipX 정합)
  • Assets/Scripts/Mechanics/GameOptimizer.cs (Init·SetupJumpThroughPlatforms·CliffWalls 정리)
  • Assets/Scripts/Gameplay/EnemyDeath.cs (BT104/BT105 강화)
  • Assets/Prefabs/Enemy.prefab (M001 sprite·y+0.8·maxSpeed 3.5)
  • Assets/Scenes/Ingame.unity (Enemy 인스턴스 16건 y+0.8·path 영역 12건 제거)
  • Assets/Character/Animations/EnemyIdle/Run/Hurt/Death.anim (M001 sprite reference)
  • ProjectSettings/TagManager.asset (Layer 18 EnemyWall)

관련 규칙·자산

  • C2 근본 해결 (BT107 PD 근본 진단 채택)
  • C5·C23·C44 정직성 (본 PM 23회 가설 누적 자인)
  • C36 PD 명시 영역만 변경
  • feedback_pm_solution_proactive_proposal (본 PM 표준 보유 한계 자인)
  • feedback_pm_excessive_decision_request (옵션 명시·PM 권고)
  • feedback_pm_mcp_direct_implementation (직접 read·yaml edit·Python 자동)

후속 영역

  • BT5-Dev 몬스터 시스템 = 거의 완료 영역 (PD 명시 "일부 제외 정합")
  • 좁은 영역 Enemy 잔여 = PD 추후 재요청 시 본 PM 후속
  • 차기 영역 = PD 결정 영역 (다른 몬스터 종류·컨텐츠 등)

엔트리 3. BT5-Dev #110 — 일부 몬스터 이동 X 정정 + Foreground 통과 X 추가 진단 의뢰

시각: 2026-05-08 후반 주체: 총괄PM 영역: BT5-Dev Phase 3 파일럿 (개발) — 게임성 개선 2건 PD 지시 유형: PD 시각 검증 1차 후 본 PM Editor.log·Scene yaml direct read 진단 + #2 즉시 정정 + #1 추가 정보 의뢰

PD 직접 지시 (2026-05-08)

  1. 이전 세션에서 통과 가능하게 수정했던 Foreground를 지나갈 수 없는 원인 찾아 정정
  2. 일부 몬스터가 이동하지 않는 원인 찾아 정정

PD 결정: (ii) #2 즉시 정정 + #1 추가 진단 동시 진행.

#2 진단·정정 — Editor.log 직접 read 확정

Editor.log [Enemy@N] 16건 영역 직접 read:

Enemy startY footPos.y startTm maxR/maxL
-3.32 -5.36 NULL → 다른 cell HasTile 3.81 / 1.59
-4.47 -1.84 NULL 0 / 0
-0.95 -5.74 NULL 0 / 0
-6.46 -2.15 NULL 0 / 0
-1.26 -5.81 NULL 0 / 0
0.08 -7.35 NULL 0 / 0
-5.71 -7.39 NULL 0 / 0
-6.50 -5.81 NULL 0 / 0
-4.92 -7.35 NULL 0 / 0
4.31 3.42 NULL 0 / 0

근본 원인: MeasureSafeWalkDistance (BT109) 영역 footPos.y = bounds.min.y - 0.5f 단일 산식이 Enemy 인스턴스마다 collider bounds·sprite bounds·transform.y 영역 변동 대응 X → footPos cell 발판 cell 영역 미정합 → startTm = NULLmaxR/maxL = 0 → patrol 거리 0 → arrive 즉시 → 무한 정지.

정정 (BT110): 다단 fallback 채택

  • sprite·collider·transform 3 영역 각 후보
  • 각 후보 × 다중 offset (-0.1·-0.3·-0.5·-0.7·-1.0) = 15 후보
  • 첫 HasTile cell 채택
  • Debug.Log 강화 (startY·colliderFoot·spriteFoot·chosenFootY)

EerieVillage commit 19e00d3 (BT110) push 완료.

#1 진단 — 본 PM 한계 도달·PD 추가 정보 의뢰

확증 사실:

  • Scene yaml Foreground GameObject 1건 단일 — components = Transform + Tilemap + TilemapRenderer (Collider2D·TilemapCollider2D·CompositeCollider2D 모두 부재)
  • [GameOptimizer] AutoForeground moved=88 (high=9 small=79 threshold=2.00) / Layer16 applied=1 — 정상 호출
  • ProjectSettings/Physics2DSettings.asset Layer matrix = ffffff...ff (모든 Layer 충돌 ON 기본)
  • KinematicObject body.Cast + ContactFilter2D struct mutation 정합
  • PlayerController UpdateContactFilterForDropThrough 매 frame 갱신 + JumpState.PrepareToJump 시점 mask OFF 강제 정합

가설 5건 누적 (직접 확증 X):

  1. AutoForeground 발판 영역 자체 충돌 (정상이지만 PD 의도와 다름?)
  2. Level 잔존 Tile (임계값 미달 + 작은 공중 발판 미해당) = Layer 0 충돌 ON
  3. Drop-Through mask OFF/ON 동기 영역 frame 정합 X
  4. PD가 Editor 직접 추가/이동한 Tile 영역 자동 분류 미정합
  5. AutoForeground 분류 Tile이 PD 통과 의도 영역과 다름

feedback_pm_root_diagnosis_priority 발동: 본 PM 가설 5건 누적 + 직접 확증 한계 = PD 추가 정보 능동 수령 의무.

PD 추가 정보 의뢰:

  • (a) 통과 X 발생 정확 위치 (Scene 좌표 또는 화면 영상)
  • (b) 통과 X 시점 입력 (점프 위로 통과 X / 옆으로 이동 X / Drop-Through Down+Jump X)
  • (c) Play 시점 Editor.log full export 또는 어떤 발판이 막는지 시각 묘사

산출물

  • Assets/Scripts/Mechanics/EnemyController.cs (MeasureSafeWalkDistance 다단 fallback)
  • 공유/개발팀_백업/EerieVillage/EnemyController.cs.bak_20260508_1700.cs
  • EerieVillage commit 19e00d3 (BT110) push 완료
  • 매니페스트 2026-05-08_BT5Dev110 archived

관련 규칙·자산

  • C2 근본 해결 (footPos 단일 산식 폐기·다단 fallback)
  • C5·C44 정직성 (Editor.log 직접 read 실측 + 본 PM 진단 한계 자인)
  • feedback_pm_root_diagnosis_priority (가설 5건 누적 후 PD 추가 정보 능동 수령 — 본 세션 신설 헌법급 feedback 첫 적용)
  • feedback_pm_solution_proactive_proposal (다단 fallback 표준 패턴 능동 검토)
  • feedback_pm_mcp_direct_implementation (Editor.log·Scene yaml·ProjectSettings 직접 read)

후속 영역

  • #2 검증 대기: PD Editor Refresh + Play → [Enemy@N] log 영역 chosenFootY·startTm 영역 정합 검증 → 16건 maxR/maxL 정합 도달 확증
  • #1 PD 추가 정보 수령: (a/b/c) 1~2건 후 본 PM 진단 재개·정정 분량 결정
  • 잔여 BT12-Dev / BT7-Dev / BT7-Plan: 본 영역 처리 후 PD 결정