Commit Graph

29 Commits

Author SHA1 Message Date
깃 관리자 57328ec151 BT5-Dev #62: BT48 commit b84c236 시점 정확 회귀 (PD 명시 채택)
PD 명시 (2026-05-07): "BT48로 복귀해봐"

변경 (git checkout b84c236):
- Assets/Scripts/Mechanics/GameOptimizer.cs = BT48 시점 영역
  (BT47 임계값 + BT48 작은 발판 휴리스틱 가로≤8+위·아래 빈)
- Assets/Scripts/Mechanics/PlayerController.cs = BT48 시점 영역 (BT57 Debug.Log 폐기)
- Assets/Prefabs/Player.prefab = BT48 시점과 동일 (m_Size 0.45×1.15·m_Offset 0,0.1)

BT48 시점 동작 (Editor.log 이전 진단):
- [BT48-MoveTiles] moved=1480 (high=1389 thresholdY=1.50 / smallAir=91 maxWidth=8)
- Foreground TilemapCollider 자동 부착 + Layer 16
- ContactFilter mask 동적 (PlayerController.UpdateContactFilterForDropThrough)
- Drop-Through 패턴 (위 착지 + ascending 통과)

BT49~BT61 누적 14회 변경 모두 폐기 + BT48 정확 회귀.

후속 의무:
- PD Refresh+Play 시각 검증
- 본 PM Editor.log [BT48-MoveTiles]·[BT48-DropThrough] direct read
- 정합 시 BT49~BT61 영역 영구 폐기·feedback 메모리 등재
2026-05-07 23:58:02 +09:00
깃 관리자 7e62f58267 BT5-Dev #61: BT47 시점 GameOptimizer 정확 회귀 (commit 1024e08)
PD 강한 어조 (2026-05-07): "또다시 발판을 통과할 수 없게 되었잖아!"

본 PM 자기검증 — 12회 가설 누적 부정확 자인:
- BT49 (None 차단·정합) → BT50/BT51 (Grid→Sprite 영역 효과 X)
- BT52/BT53 (카탈로그·decor=1 부정확)
- BT54 (Foreground 충돌 제거·발판 위 X)
- BT55 (BT47 회귀 시도·BT58 BoxCollider 영향)
- BT58 (BoxCollider BT47 회귀·점프 X 보고)
- BT59 (BT49 회귀 + Foreground 충돌 제거·발판 위 X)
- BT60 (자동 분류 폐기·발판 통과 X)

PD 명시 흐름 ('Foreground = Grid → Foreground 배경 의도') 정합 시도 모두 실패.
PD가 발판 통과·점프·위 착지 모두 정합 인식한 마지막 시점 = BT47 (commit 1024e08).

BT61 정정:
- git checkout 1024e08 -- Assets/Scripts/Mechanics/GameOptimizer.cs (BT47 시점 정확 회귀)
- BT47 영역 = Foreground TilemapCollider 자동 부착 + Layer 16 + Level→Foreground 임계값 자동 분류 + Sprite 강제
- Player.prefab BT58 그대로 (BT47 정합 영역)
- PlayerController.cs BT57 Debug.Log 그대로 (영향 X)
- diff: +38 / -46 (BT49~BT60 누적 영역 모두 폐기)

PD 의도 정합 (BT47 시점):
- 발판 위 착지  (Foreground TilemapCollider + Layer 16 + ContactFilter 동적 mask)
- 점프 ascending 통과  (PlayerController.UpdateContactFilterForDropThrough)
- 임계값 위 (worldY>=playerY+1.5) Tile 자동 분류

BT49 None 차단 영역(나무 통과) = BT47 시점에 미적용 = 나무도 발판처럼 충돌 영역 재발 가능 (PD 첫 보고 영역).
BT47 정합 우선 + 나무 충돌 영역 후속 PD 결정 영역.

본 PM 능력 한계 자인 — PD 추가 명시 영역 결정 영역 의무.
2026-05-07 23:42:10 +09:00
깃 관리자 8ddd5eed43 BT5-Dev #60: 자동 분류 영역 폐기 — Level 발판 Tile 보존 (PD 발판 위 착지 의도 정합)
PD 보고 (2026-05-07): "지금은 발판 위에 올라갈 수 없게 되었어."

근본 원인 (본 PM 자기검증):
- BT49 자동 분류 (Level → Foreground 이동) = SetTile(null) 영역에서 Level 발판 Tile 제거
- Foreground TilemapCollider X (BT59) = Foreground 충돌 X
- = Level 발판 Tile 사라짐 + Foreground 영역 충돌 X
- = 발판 위 착지 X (PD 보고 영역)

BT60 정정:
- BT48 자동 분류 영역 폐기 (임계값+작은 발판 휴리스틱)
- BT49 사후 복원 영역 폐기 (None 처리)
- Foreground 자동 부착 영역 (TilemapCollider 제거 — BT59 영역) 그대로 유지
- 결과:
  - Level Tilemap = Scene yaml 영역 그대로 (영구 충돌·발판·지면 역할)
  - Foreground Tilemap = 시각만 (TilemapRenderer + Layer 16·TilemapCollider X)

PD 의도 정합 효과:
- Player가 Level 지면 위 착지 (영구 충돌)
- Foreground 영역 자유 통과 (충돌 X·시각만)
- BT47부터 누적된 Foreground Tile (Scene yaml) = 시각상 잔존·통과 가능

부수 영역:
- IsSmallAirPlatform 헬퍼 = dead code (사용 X·후속 정리 권고)
- 변경 전 자동 분류 영역 코드 = git history 9adfc64(BT49)·92f102e(BT59) 보존
2026-05-07 23:38:35 +09:00
깃 관리자 92f102e950 BT5-Dev #59: BT49 시점 회귀 + Foreground TilemapCollider 제거 (PD 명시 채택)
PD 명시 (2026-05-07): "BT49 정정 (commit 9adfc64) 시점에서 Foreground에 충돌체크만 없애면 될거 같은데?"

변경:
1. GameOptimizer.cs = git checkout 9adfc64 영역 회귀 (BT49 자동 분류 + None 차단 + colliderType 존중 + 사후 복원)
2. Foreground 자동 부착 영역 정정:
   - TilemapCollider2D 자동 부착 폐기
   - 기존 TilemapCollider2D Object.Destroy
   - fgTc null 유지 → 사후 복원 영역 자동 skip

결과 (PD 의도):
- Foreground Tilemap = 시각만 (TilemapRenderer + Layer 16·TilemapCollider X)
- BT48 자동 분류 (임계값+작은 발판) = SetTile 작동·ProcessTilemapChanges X (fgTc null)
- Level Tilemap = 영구 충돌 (발판·지면 역할)
- Player가 Level 지면 위 착지 + Foreground 영역 자유 통과

Player.prefab BoxCollider2D BT58 영역 그대로 (BT47 정확 회귀: 0.45×1.15 + offset 0,0.1)
PlayerController.cs BT57 Debug.Log 그대로 (Drop-Through 영역 폐기로 영향 X)

후속 의무:
- PD Refresh+Play 시각 검증
- Editor.log [BT48-MoveTiles] 직접 read (이름 BT48이지만 실제 BT49 회귀 코드)
- 정합 시 BT55+BT58 영역 폐기 채택 영구화
2026-05-07 23:36:26 +09:00
깃 관리자 3404a319fc BT5-Dev #55: BT47 정합 회귀 — Drop-Through 패턴 복원 (PD 명시 채택)
PD 명시 (2026-05-07):
1. "발판은 위에 설 수 있어야 해"
2. "내가 말한건 Grid → Foreground를 말한거야" (이미지 첨부)
3. "이전 버전처럼 발판을 통과해서 이동하거나 점프할 수 있도록 되돌려"

변경:
1. BT54 폐기 — Foreground TilemapCollider2D 자동 부착 회복 (Drop-Through 패턴 복원)
2. 자동 분류 영역 BT47 정확 회귀:
   - 임계값(worldY >= playerY+1.5) 분류
   - Sprite 강제 (BT47 호환·sprite 빈 픽셀 영역 점프 통과 보존)
   - BT49 None 차단 유지 (tree·plant·fence·house 자체 통과)
3. 폐기:
   - BT48 작은 발판 휴리스틱 (가로≤8+위·아래 빈)
   - BT50 Grid→Sprite 이동 시 강제
   - BT52 TileFloating* 단일 매칭
   - BT53 카탈로그 8종 (TileFloating* + 배경·건물 7종)
4. 사후 복원 영역 (BT51 None 처리) 유지

효과 (PD 명시 정합):
- 발판 위 착지 (Foreground TilemapCollider + Layer 16 + ContactFilter 동적 mask)
- 점프 ascending 통과 (PlayerController.cs UpdateContactFilterForDropThrough — BT40 개발팀장 진단)
- 모든 비-None Tile 자동 분류 (BT47 시점 moved=1389 정합 회귀)
- tree·plant·fence·house 자체 통과 (BT49 None 차단)

본 PM 6회 가설 누적 부정확 자인:
- BT49 None 차단 (정합·유지)
- BT50 Grid→Sprite 이동·사후 강제 (효과 X)
- BT51 사후 Grid→Sprite 폐기 (효과 X)
- BT52 TileFloating* 단일 (decor=0 부정확)
- BT53 카탈로그 8종 (decor=1 부정확·1266개 미식별)
- BT54 Foreground TilemapCollider 제거 (발판 위 착지 X — PD 의도 부정합)
→ BT47 정합 영역 회귀 = PD 명시 "이전 버전처럼" 정합

후속 의무:
- PD Refresh+Play 시각 검증 + 본 PM Editor.log [BT55-MoveTiles] direct read
- BT49 후 "두 레이어 겹친 숨겨진 길 통과 X" 보고 영역 재발 시 PD 결정 영역

Debug.Log: [BT55-MoveTiles] moved=N (BT47 임계값 회귀·Sprite 강제·BT49 None 차단·thresholdY=...)
2026-05-07 23:22:36 +09:00
깃 관리자 bbf7041676 BT5-Dev #54: Foreground TilemapCollider2D 제거 — 시각만 표시 (PD 단순 제안 채택)
PD 결정 (2026-05-07): "그냥 단순히 Foreground에 충돌체크만 없애면 되지 않을까?"

변경:
- BT47 Foreground TilemapCollider2D 자동 부착 영역 폐기
- 기존 TilemapCollider2D Object.Destroy
- fgTilemap·fgTc null 유지 → 자동 분류(§83~) + 사후 복원(§129~) 자동 skip
- Foreground GameObject Layer 16 유지 (시각 정합)

영향 (PD 사전 명시 + 인지):
- 모든 Foreground Tile 충돌 X = 발판 위 착지 X (Drop-Through 패턴 폐기)
- BT47부터 자동 분류로 Foreground에 누적된 Tile들 = 시각만·자유 통과
- Level Tilemap (TileGround·TileGroundTop 1266개)만 영구 충돌 유지

본 PM 5회 가설 누적 부정확 후 PD 직접 단순 해결 채택:
- BT49 None 차단 (효과 X·restored=0)
- BT50 Grid→Sprite 강제 (효과 X·forced=0)
- BT51 사후 Grid→Sprite 폐기 (효과 X·restored=0)
- BT52 TileFloating* 단일 (decor=0 부정확)
- BT53 카탈로그 8종 확장 (decor=1 부정확·1266개 미식별)
→ PD 단순 제안 = 5회 가설 모두 우회

롤백 경로 (pm-auditor 권고):
- BT47 자동 분류 영역 + 사후 복원 영역 코드 보존 (fgTilemap null check skip만 추가)
- 회귀 시 fgTc 자동 부착 영역 회복 → 자동 분류 재가동 가능

후속 의무:
- PD Refresh+Play 시각 검증 + 본 PM Editor.log direct read
- 발판 위 착지 보존 의도 시 BT54 회귀 또는 카탈로그 v1.2 전환

Debug.Log: 자동 분류·사후 복원 출력 모두 fgTilemap null로 skip → BT54 시점 출력 X
2026-05-07 23:17:57 +09:00
깃 관리자 0d6b78cc3a BT5-Dev #53: 자동 분류 카탈로그 8종 확장 — TileFloating* + 배경·건물 7종 (PD 옵션 A1 채택)
PD 결정 (2026-05-07): "PM 권고안대로 해"

근본 원인 (Editor.log 직접 read):
- BT47 정상 시점 [BT47-MoveTiles] moved=1389 = PD 통과 가능 인식 영역
- BT52 보수적 후 [BT52-Classify] floating=122 = TileFloating* 3종만 = 배경·건물 7종 Level 잔존 = 영구 충돌
- PD 보고: "기존과 다르게 레벨 오브젝트가 생성됨·정상적인 플레이가 안 되고 있어"
- = 배경·건물 7종이 BT47 정상 시점 자동 분류된 결과로 추정 (가설)

옵션 A1 카탈로그 8종 SOT (GameOptimizer.cs SetupJumpThroughPlatforms 영역):
1. TileFloating* (3종) — 공중 발판 (Drop-Through):
   - TileFloatingLeftEdge·TileFloatingRightEdge·TileFloatingTileMiddle
2. 배경·건물 (7종 — 자동 Foreground 이동·Drop-Through):
   - ShortBuilding·TallBuilding·MidgroundFiller (건물·배경 채움)
   - cloud·hillside·midground·mountains (배경 Parallax)

Level 잔존 (영구 충돌 또는 자연 통과):
- TileGround·TileGroundDark·TileGroundTop (3종 지면 — 영구 충돌)
- tree·plant·fence·house (4종 None — 자체 통과)

마이그레이션 X (PD 옵션 A 결정 유지 — Foreground 변경 X·위험 최소화).
사후 복원 영역 (BT51 None 처리) 유지.

가설 한계:
- 배경·건물 7종이 PD 의도 발판/통과 영역인지 확증 X (PD 시각 검증 후 정정 가능)
- 가설 실패 시 카탈로그 v1.1 재조정 또는 옵션 A2 (PD 직접 17종 명시) 전환 의무

Debug.Log: [BT53-Classify] moved=N (floating=F decor=D)
본 PM 직접 Editor.log read 의무 (PD 시각 검증 결과 보고 직후).
2026-05-07 23:06:28 +09:00
깃 관리자 77915e21ab BT5-Dev #52: 자동 분류 보수적 정정 — TileFloating* 3종만 (PD 옵션 A 채택)
PD 결정 (2026-05-07): "A안대로 진행해"

근본 원인 (Editor.log 직접 read):
- [BT48-MoveTiles] moved=3524 비정상 (정상 1389 대비 2.5배)
- BT47/BT48 휴리스틱(임계값 playerY+1.5·작은 발판 가로≤8+위·아래 빈) = 정상 길·배경 벽지까지 자동 Foreground 이동
- → "숨겨진 레이어가 정상적인 길을 막고 있어" 근본 원인
- BT49/BT50/BT51 사후 복원 가설 모두 효과 X (restored=0/forced=0) — 4회 누적 부정확 자인

옵션 A 변경 (PD 승인 범위):
1. 휴리스틱 폐기: 임계값·작은 발판·BT49 None 차단 영역 모두 폐기
2. 새 알고리즘: Tile asset 이름 prefix "TileFloating" 3종만 자동 분류
   (TileFloatingLeftEdge·TileFloatingRightEdge·TileFloatingTileMiddle — 카탈로그 17종 중 명시적 Floating 의도 3종)
3. 그 외 모든 Tile = Level 잔존 (PD Inspector 직접 분류 — 표준 Unity Tilemap 워크플로우)
4. 마이그레이션 X (PD 옵션 A 결정 — Foreground 변경 X·위험 최소화)
5. IsSmallAirPlatform 헬퍼 폐기 (dead code)
6. 사후 복원 영역 (BT51 None 처리) 유지

후속 의무:
- PD Refresh+Play 시각 검증 + 잘못 분류된 영역 발견 시 PD 직접 Inspector 정정 또는 카탈로그 확장 안건
- 본 PM 직접 Editor.log [BT52-Classify] floating moved=N read 의무

Debug.Log: [BT52-Classify] floating moved=N (Level→Foreground TileFloating* 3종만)
2026-05-07 22:57:08 +09:00
깃 관리자 dc00afd0a2 BT5-Dev #51: 사후 복원 영역 Grid→Sprite 강제 폐기 — PD 직접 그린 Tile default 형상 보존
PD 보고 (BT50 후): "숨겨진 길이 최상단에 나와버려서 길을 다 막고 있어"

원인 가설:
- BT50 사후 복원 영역 = Foreground에 PD가 직접 그린 Grid Tile을 무차별 Sprite 강제
- PD Editor 직접 그린 Tile = default colliderType (Tile asset의 Grid) 의도
- 무차별 Sprite 강제 = PD 의도 형상 변형 → 통과 영역 차단

정정:
- 사후 복원: None Tile만 SetColliderType(None) 복원 (BT49 영역 정합 회귀)
- Grid→Sprite 강제 코드 영역 폐기
- 이동 시 Grid→Sprite 강제(상단)는 유지 — Level→Foreground 이동 신규 Tile만 Sprite 적용

효과:
1. Level→Foreground 이동 신규 Tile = Sprite Collider (BT49 후 통과 X 정정 유지)
2. PD 직접 그린 Grid Tile = default Grid Collider (PD 의도 형상 보존)
3. None Tile = 배경 통과 (BT49 영역 정합)

가설 한계 (pm-auditor Major #1 자인):
- BT50 사후 복원이 진짜 원인 확증 X. PD 시각 검증 후 효과 X 시 즉시 추가 가설 (Layer Matrix·UpdateContactFilter·Tilemap sortingOrder·Tile 위치 좌표) 전환 의무.

Debug.Log: [BT51-FgRefine] None restored=N (forced Sprite 카운터 폐기)
PD Refresh+Play 시 숨겨진 길 통과 + 이전 발판 정상 동작 시각 검증.
본 PM 직접 Editor.log read 의무 (PD 시각 검증 결과 보고 직후).
2026-05-07 22:43:37 +09:00
깃 관리자 867f0de253 BT5-Dev #50: 두 레이어 겹친 숨겨진 길 통과 복원 — Grid→Sprite Collider 강제
근본 원인 가설:
- Tile asset 카탈로그 17종: 13종 colliderType=1 (Grid·사각형) / 4종 0 (None — tree·plant·fence·house)
- 이전 BT47 = SetColliderType(Sprite) 무차별 강제 → 픽셀 정확 Collider (sprite 빈 영역 점프 통과 가능)
- BT49 = colliderType 존중 → Grid Tile은 SetColliderType(Grid) → 사각형 Collider (빈 영역 X) → 통과 차단

표준 패턴 정정 (BT49 metadata 존중 유지 + 이전 BT47 호환):
1. 이동 시: None=None (배경) / Grid→Sprite (강제) / Sprite=Sprite (그대로)
2. 사후 복원: Foreground 이미 그려진 Grid Tile = SetColliderType(Sprite) 강제 + ProcessTilemapChanges
- Debug.Log: [BT50-FgRefine] None restored=N / Grid→Sprite forced=M

가설 검증 의무 (pm-auditor Minor 권고):
PD 시각 검증 실패 시 Layer Matrix·UpdateContactFilter 가설 즉시 전환.

PD Refresh+Play 시 Console [BT50-FgRefine] forced=M + 숨겨진 길 통과 시각 검증.
본 PM 직접 Editor.log read 의무 (PD 시각 검증 결과 보고 직후).
2026-05-07 22:29:13 +09:00
깃 관리자 9adfc64625 BT5-Dev #49: 배경 Tile (tree·cloud) 충돌 차단 — Tile asset m_ColliderType 존중
근본 원인:
- BT47 line 106 `SetColliderType(pos, Sprite)` 무차별 강제
- tree.asset `m_ColliderType: 0` (None — 배경 의도) 무시 → 발판처럼 충돌

표준 패턴 정정 (3종 결합):
1. 분류 단계: Tile asset이 ColliderType.None = Foreground 이동 차단 (Level 잔존)
2. Foreground 이동 시: Tile asset 원래 colliderType 존중 (None=배경 / Sprite=발판)
3. Foreground 사후 복원: 이미 그려진 None Tile = SetColliderType(None) + ProcessTilemapChanges

Tile asset m_ColliderType 메타데이터 = 충돌 의도 SOT.
- m_ColliderType: 0 (None) = 배경 (충돌 X · 통과)
- m_ColliderType: 2 (Sprite) = 발판/지형 (충돌 ON)
발판 의도 Tile은 m_ColliderType=Sprite 명시 필수.

후속 점검 권고: 모든 Tile asset의 m_ColliderType 일제 검토 (PD 디자인 의도 정합 검증).

PD Refresh+Play 시 Console [BT49-Background] restored=N + 나무 통과 시각 검증.
본 PM 직접 Editor.log read 의무 (PD 시각 검증 결과 보고 직후).
2026-05-07 21:47:56 +09:00
깃 관리자 b84c236761 BT5-Dev #48: 작은 공중 발판 자동 분류 강화 (위·아래 빈 공간 + 가로 ≤8 tile)
BT47 단일 임계값(playerY+1.5) 의존 한계: 첨부 이미지 같은 낮은 위치 발판 누락.

BT48 분류 조건 2종 결합:
- (a) 임계값 위 = 무조건 공중 (BT47 호환)
- (b) 임계값 아래여도 위·아래 인접 Tile 모두 빈 공간 + 가로 연속 길이 ≤8 tile = 작은 공중 발판
  → 일반 지면(통상 10+ tile) 잘못 분류 방지 + PD 의도 발판 자동 포함

표준 One-Way Platform / Drop-Through 패턴 정합 (Layer 16 + ContactFilter2D 동적 mask).

8 tile 임계값 = 추정 proxy (일반 platformer 지면 10+ tile 가정·실측 미확증).
PD 시각 검증 후 의도와 다른 발판 분류 시 임계값 조정 또는 알고리즘 재설계 후속.

PD Editor Refresh+Play 시 Console [BT48-MoveTiles] high=N smallAir=M 출력으로 분류 결과 검증 가능.
본 PM 직접 Editor.log read 의무 (PD 시각 검증 결과 보고 직후).
2026-05-07 21:27:11 +09:00
깃 관리자 1024e089c7 BT5-Dev #47: Level Tilemap 공중 Tile 영역 자동 영역 Foreground 이동 (Y > Player 시작 +1.5)
PD 보고: 공중 발판 통과 X 여전 ([BT30-Collide] name='Level' layer=0)
PD 진단: prefab 영역 영역 영역

본 PM 자인:
- Level Tilemap = 일반 지면 + 공중 발판 통합 = 단일 GameObject 모든 Tile 동일 동작 = 분리 X
- 공중 발판 부딪힘 = Level Tilemap 일부 Tile

정정 (런타임 자동 분리):
- Player 시작 Y + 1.5 위 Tile = 공중 발판 영역 → Foreground Tilemap 영역 자동 이동
- Level Tilemap의 해당 Tile 영역 제거
- Foreground Tile m_ColliderType=Sprite 강제
- 양 Tilemap ProcessTilemapChanges 영역 영역 영역

동작:
- Level Tilemap (Layer 0) = 일반 지면·벽 (영구 충돌)
- Foreground Tilemap (Layer 16 + Sprite Collider) = 공중 발판 (Drop-Through)
- Player 점프 → 공중 발판 통과 / 벽 영역 막힘
- Player 걷기 → 공중 발판 옆 통과 / 일반 지면 영역 영역
2026-05-07 18:42:03 +09:00
깃 관리자 06c6d5b3c7 BT5-Dev #46: prefab/Tile 영역 분리 (PD 제안 채택)
PD 진단: '접근 방법이 잘못 된 것 같아. 프리펩을 수정해야하는게 아닐까?'

진단:
- BT45 모든 Tilemap Layer 16 = 벽도 Drop-Through = 점프 시 벽 통과 (PD 보고 1)
- Foreground Tile asset m_ColliderType=None 가능성 → TilemapCollider2D 추가해도 Tile별 Collider 미생성 = 통과 X 영역 영역 (PD 보고 2)

정정:
- Level Tilemap (name='Level' + TilemapCollider2D) = Layer 0 (일반 지면·벽 영구 충돌)
- Foreground Tilemap = TilemapCollider2D + Layer 16 + 모든 Tile m_ColliderType=Sprite 런타임 강제 (HasTile 영역 영역 SetColliderType + ProcessTilemapChanges)
- Alien 등 별개 BoxCollider2D = Layer 16

동작:
- 시작 → Level Tilemap 위 정착 (Layer 0)
- 점프 영역 → 벽(Layer 0) 막힘 정합 / Foreground 발판(Layer 16) mask OFF 통과
- 걷기 옆 영역 발판 → footHit X → mask OFF → 통과
- 점프 후 발판 위 → footHit Layer 16 → standingOnPlatform=true → 착지
2026-05-07 18:37:43 +09:00
깃 관리자 1be657e215 BT5-Dev #45: Level Tilemap도 Layer 16 복원 (PD 의도: 점프 영역 통과·standingOnPlatform 영역 영역)
PD 보고: 다시 점프 영역 통과 X (BT44 변경 영역)

진단:
- BT44 Level Tilemap Layer 0 복원 = Player 점프 영역 영역 Level 영역 영역 천장·옆 영역 영역 영역 영역 막힘
- [BT30-Collide] name='Level' layer=0 출력 = Player Level 영역 일반 충돌

PD 의도:
- 점프해서 올라갈 발판 = Level Tilemap 자체 (Tile 영역 영역 영역 = 분리 X)
- 모든 발판 = Drop-Through (Layer 16)
- standingOnPlatform 판정 (footHit + !isJumpingThrough)으로 영역 영역 영역 영역 영역

정정:
- Level Tilemap 영역 영역 → Layer 16 (BT44 영역 폐기)
- BT43 PlayerController standingOnPlatform 영역 footHit 단독 판정 영역 그대로

동작:
- 시작 → footHit Layer 16 → standingOnPlatform=true → mask ON → Level 위 정착
- 걷기 옆 영역 발판 영역 → footHit X (Player 발 영역 발판 영역 X) → mask OFF → 통과
- 점프 (Jumping) → mask OFF 강제 → 모든 발판 통과
- 하강 후 발판 위 → footHit → 착지
2026-05-07 18:34:11 +09:00
깃 관리자 2294da9264 BT5-Dev #44: 일반 지면(Level Tilemap) Layer 0 + 공중 발판(Foreground·Alien) Layer 16 분리
PD 의도 정확 파악:
- 이동할 때 통과 = '공중에 떠있지만 이동 경로에 걸리는 발판'
- 바닥(Level Tilemap) = 일반 충돌 (서 있어야 함)
- 공중 발판 = Drop-Through (걷기·점프 모두 통과)

본 PM 자인:
- BT38부터 모든 Collider Layer 16 변환 = Level Tilemap도 Drop-Through
- PD 의도(일반 지면 영역 영역 X) 정합 X

정정:
- Level Tilemap (TilemapCollider2D + name='Level') = Layer 0 그대로 (BT38·BT40·BT43 잔존 복원)
- Foreground GameObject = TilemapCollider2D 동적 추가 + Layer 16 (공중 발판)
- 별개 BoxCollider2D (Alien 등) = Layer 16

동작:
- Level Tilemap 위 = Player 일반 충돌 = 안 떨어짐
- 공중 발판(Foreground·Alien) 영역 = 걸어가면 통과·점프해도 통과·위에서 떨어지면 착지
2026-05-07 18:29:59 +09:00
깃 관리자 a6e0c0d56d BT5-Dev #40: ContactFilter2D mask 동적 갱신 (개발팀장 진단·KinematicObject raycast 정합)
PD 지시: 개발팀과 논의 후 보고
개발팀장 Opus 직접 진단:

근본 원인:
- KinematicObject.Start()에서 contactFilter.SetLayerMask() 한 번 캐싱
- 이후 Physics2D.IgnoreLayerCollision으로 Layer Matrix 토글해도 contactFilter는 갱신 X
- body.Cast() raycast 영역 contactFilter 활용 = Layer Matrix 영역 무관
- 본 PM 19회 시도 모두 raycast 영역 미적용 = 발판 충돌 그대로 감지

해결 (Unity Kinematic2D 표준 Drop-Through 패턴):
- PlayerController.UpdateContactFilterForDropThrough — velocity.y > 0 (상승) 영역 Layer 16 mask 비활성
- contactFilter.SetLayerMask() 매 프레임 동적 갱신 = raycast가 발판 영역 무시
- GameOptimizer Physics2D.IgnoreLayerCollision(13, 16, false) 라인 폐기 (Layer Matrix 항시 ON 유지)
- BT39 Coroutine 영역 폐기

본 PM 자인:
- KinematicObject body.Cast() vs Rigidbody2D OnCollisionEnter 별도 경로 미인지
- ContactFilter2D 캐싱 동작 미인지
- 19회 시도 모두 Rigidbody collision callback 영역 (raycast 영역 무관)

동작:
- 점프 상승 (velocity.y > 0.01) → contactFilter mask Layer 16 비트 제거 → raycast 발판 영역 무시 → 통과
- 하강·정지 → mask 복원 → raycast 발판 영역 감지 → 착지
2026-05-07 18:16:01 +09:00
깃 관리자 e5c5898f79 BT5-Dev #38: Layer 16(JumpThrough) + 동적 IgnoreLayerCollision 토글 (PD 제안 채택)
PD 보고: 발판 통과 X 여전 (BT35 PlatformEffector2D+Composite 영역 동작 X)
PD 제안: 충돌 로직 바꿔서 해결

표준 Drop-Through 패턴:
- Tilemap·Alien Layer 16 변환 (BT38)
- 기본: Player(13) ↔ JumpThrough(16) 충돌 ON = 정상 착지
- PlayerController.Update: velocity.y > 0.05 (상승) → IgnoreLayerCollision(13, 16, true) = 모든 발판 통과
- velocity.y <= 0.05 (하강·정지) → IgnoreLayerCollision(13, 16, false) = 충돌 ON = 착지

폐기:
- PlatformEffector2D·CompositeCollider2D·Rigidbody2D Static (BT35 영역)
- Layer 8·PlatformDropThrough Raycast (BT27·BT31 영역)

동작 (PD 의도 정합):
- Player 점프 상승 → 발판 모두 통과
- Player 하강 → 발판 위 착지
- 옆·아래에서 점프 → 통과 (상승 영역 모든 Layer 16 OFF)
2026-05-07 18:07:54 +09:00
깃 관리자 900affb5c5 BT5-Dev #35: 점프 측면 피해 방어 + Tilemap+CompositeCollider2D+Rigidbody2D Static+PlatformEffector2D 표준 패턴
PD 보고:
1. 밟기 시 측면 피해 발생 — [PEC] delta=-1.15~-0.41 stomped=False pInvuln=True
2. 발판 통과 X 여전 — [BT34-OneWay] applied=2 [Alien, Level] 적용 정합이지만 동작 X

진단:
- TilemapCollider2D + PlatformEffector2D 단독 = Unity 영역 동작 X
- Unity 표준 = TilemapCollider2D(compositeOperation=Merge) + CompositeCollider2D + Rigidbody2D(Static) + PlatformEffector2D 4종 조합

정정:
- PlayerEnemyCollision: stomped=False + !player.IsGrounded → 점프 측면 피해 차단 (PD 지시 방어 코드)
- GameOptimizer: TilemapCollider2D 영역에 CompositeCollider2D·Rigidbody2D Static·PlatformEffector2D 4종 조합 적용

동작:
- Player 위에서 발판 떨어짐 → 충돌 (착지)
- Player 옆·아래·점프 상승 → 통과
- Enemy 측면 충돌 시 점프 상태이면 피해 X
2026-05-07 17:57:30 +09:00
깃 관리자 cd60c71097 BT5-Dev #34: Layer 8·Raycast 폐기 + PlatformEffector2D 표준 OneWay 복원 (PM 자인)
진단:
- [BT32-StartHit] dist=0.54 layer=8 정상 + Player 떨어짐 모순
- 원인: Physics2D.IgnoreLayerCollision(13, 8, true) Layer Matrix OFF + Physics2D.IgnoreCollision(c1, c2, false) 호출 충돌
- Unity Manual: Layer Matrix 영역 OFF면 개별 IgnoreCollision(false) 호출 무시
- 본 PM 영역 잘못: Layer 8 + Raycast 영역 표준 패턴 X

진정한 표준: PlatformEffector2D + useOneWay + surfaceArc 180
- 위에서 떨어지면 충돌(착지)
- 옆·아래·점프 상승 시 통과
- Layer 무관 (기본 Layer 0)

정정:
- IgnoreLayerCollision(13, 8) 폐기 (Layer 13 ↔ 14만 유지)
- 모든 일반 Collider(Tilemap 포함) PlatformEffector2D + useOneWay 적용
- Layer 8 잔존 → Layer 0 복원
- PlayerController PlatformDropThrough AddComponent → Destroy 대체
- PlatformDropThrough.cs 영역 동작 X (자동 제거)
2026-05-07 17:49:58 +09:00
깃 관리자 0eea12d945 BT5-Dev #31: Level Tilemap Layer 8 변환 + Raycast 동적 거리·Start 즉시 활성 (충돌 진단 결과)
[BT30-Collide] name='Level' layer=0 — Player 충돌 GameObject = Level Tilemap 확정.
PD 의도 = Level Tilemap 영역 전체 Drop-Through (점프 시 통과 + 하강 시 Raycast 착지)

본 PM 자인 (BT28 떨어짐 원인):
- Raycast 거리 0.1m 너무 짧음 → velocity 빠른 하강 시 miss
- 시작 시 즉시 활성 X → Player 시작 위치 발판 영역 통과 = 떨어짐

정정:
- GameOptimizer: TilemapCollider2D 제외 영역 폐기 → Level Tilemap도 Layer 8 변환
- PlatformDropThrough.Start: 시작 시 즉시 1회 raycast → Player 시작 위치 발판 영역 충돌 활성 (떨어짐 차단)
- PlatformDropThrough.Update: footRayDistance 0.1 → 0.5 + velocity 기반 동적 거리 (Mathf.Max + |vy|*deltaTime + 0.1)

동작:
- 시작 시 [BT31-StartHit] 출력 + Player 발판 위 정상 정착
- 점프 시 IgnoreCollision(true) 복구 = 통과
- 하강 시 raycast hit → IgnoreCollision(false) = 착지
2026-05-07 17:26:45 +09:00
깃 관리자 4fd9369139 BT5-Dev #29: 일반 지면 Layer 0 복원 + Foreground TilemapCollider2D 동적 추가 (PM 자인)
PD 보고: 게임 시작 시 Player 바닥으로 계속 떨어짐 — '점프 후 착지는 가능해야 한다고 했잖아'

본 PM 자인 (BT28 잘못):
- 모든 Collider(TilemapCollider2D 포함) Layer 8 변환 = 일반 지면도 Layer 8 = 통과 = 떨어짐
- 표준 platformer 영역 = 일반 지면(Layer 0) + 발판(Layer 8) 분리 의무

정정:
- TilemapCollider2D 제외 영역 복원 → Level Tilemap = Layer 0 = 일반 충돌 = 착지 정합
- Foreground GameObject(TilemapRenderer만·Collider 미부착) 영역에 TilemapCollider2D 동적 추가 + Layer 8 변환 → 발판 정합

동작:
- Level Tilemap = 일반 지면 (Layer 0) = Player 정상 착지·이동
- Foreground Tilemap = 발판 (Layer 8) = 기본 통과 + Player 발 Raycast 시 Drop-Through 착지
- 별개 BoxCollider2D(Alien 등) = Layer 8 = 발판 정합
2026-05-07 17:15:57 +09:00
깃 관리자 151cd1794b BT5-Dev #28: Tilemap Layer 8 변환 + STOMP_DELTA 시각 정합 (-0.4~-0.05)
PD 보고:
1. 발판 통과 X — Tilemap Layer 0 그대로 → 일반 충돌 → 점프 통과 X
2. 밟기 위치 너무 높음 — STOMP_DELTA_MAX +0.1 → 시각 발이 Enemy 머리 위 0.1 떠 있음

데이터 진단:
- [BT27-JumpThrough] applied=1 (Alien only) — Tilemap 제외로 발판 영역 미적용
- [PEC] stomped=True delta=-0.11~-0.28 — Collider 영역만 정합 / 시각 영역 차이 0.2

정정:
- GameOptimizer: TilemapCollider2D 제외 영역 폐기 → 모든 일반 Collider Layer 8 변환
- PlayerEnemyCollision: STOMP_DELTA -0.3~+0.1 → -0.4~-0.05 (Player Collider Offset +0.10 + Enemy sprite 위 여백 0.1 보정)

Drop-Through 패턴 동작:
- 모든 지면·발판 Layer 8 = 기본 통과 (Player 13 ↔ Layer 8 IgnoreLayerCollision)
- Player 하강 + 발 Raycast hit → IgnoreCollision(false) 임시 활성 = 착지
- 점프(상승) → IgnoreCollision(true) 복구 = 통과
2026-05-07 17:11:20 +09:00
깃 관리자 98bfbd74a2 BT5-Dev #27: Layer 8(JumpThrough) + Raycast 동적 IgnoreCollision (PD 제안)
PD 제안 채택 — PlatformEffector2D 폐기 + 표준 Drop-Through Platform 패턴:
- Player(13) ↔ JumpThrough(8) 기본 통과 (Physics2D.IgnoreLayerCollision)
- Player 발 Raycast (Layer 8 mask, 0.1m) + 하강 시 → IgnoreCollision(false) 임시 활성 = 착지
- 상승 시 → IgnoreCollision(true) 복구 = 통과
- 발판 떠남 → IgnoreCollision(true) 복구

변경:
- GameOptimizer: SetupOneWayPlatforms → SetupJumpThroughPlatforms (Layer 8 변환·PlatformEffector2D 잔존 제거)
- PlatformDropThrough.cs (신설): 발 Raycast + 동적 IgnoreCollision
- PlayerController.Awake: PlatformDropThrough 자동 부착
2026-05-07 17:04:25 +09:00
깃 관리자 d15a46b5cc BT5-Dev #25: Bounds 기반 footHeadDelta + Tilemap OneWay 폐기 (PD 의도 정합)
PD 보고:
1. 점프 밟기 위치 너무 높음 — dyAtCollision = transform 차 (center vs center) 영역 잘못
2. 발판 통과 X — Tilemap OneWay 영역 적용 = 모든 Tile 영역 OneWay = 일반 지면 영역 깨짐

정정:
- EnemyController.Update: dyAtCollision = Player.Bounds.min.y - Enemy.VisualBounds.max.y (footHeadDelta)
- PlayerEnemyCollision: stomped = (-0.2 < delta < 0.3) — Player 발 ≈ Enemy 머리 영역
- GameOptimizer: TilemapCollider2D 영역 영역 OneWay 영역 영역 폐기 → 별개 BoxCollider2D 영역 OneWay (Alien 등 점프 가능 발판 영역 영역만)
2026-05-07 16:42:31 +09:00
깃 관리자 806e5f722e BT5-Dev #22 진정한 근본: Enemy.prefab m_Layer 13→14 + m_TagString Player→Untagged + IgnoreLayerCollision(13,14)
본 PM 자인 (C5·C39·C44):
- BT5-Dev #1~#21 동안 Enemy.prefab m_Layer/m_TagString 영역 검증 X 누적
- Enemy의 m_Layer=13 (Player와 동일) + m_TagString=Player (Player tag 중복) = 진정한 근본
  → FindGameObjectWithTag("Player")가 Enemy 발견 + Layer 동일로 IgnoreCollision도 효과 X
- 본 PM이 추측·Bounds·Distance·IgnoreCollision·OneWay 영역 모두 = 도달 영역 외 정정

정정:
- Enemy.prefab m_Layer 13→14
- Enemy.prefab m_TagString Player→Untagged
- GameOptimizer Physics2D.IgnoreLayerCollision(13, 14, true) BeforeSceneLoad

영구 효과:
- FindGameObjectWithTag("Player") = Player.prefab만 발견 정합
- Player Layer 13 ↔ Enemy Layer 14 충돌 OFF = 통과 정합
- IgnoreCollision instance 영역 의존 X = 안전
2026-05-07 16:09:54 +09:00
깃 관리자 874f58a66e BT5-Dev #21: vy 조건 폐기·Awake fallback IgnoreCollision·OneWay 디버그 강화 2026-05-07 16:00:40 +09:00
깃 관리자 db6bb2051d BT5-Dev #19: 지형 통과(모든 Collider OneWay)·밟기 stompMinDy 0.1·낙사 hit 모션 X 2026-05-07 15:50:17 +09:00
깃 관리자 eed8ee5902 BT5-Dev #16: PM 변경 영역 일괄 commit (PD Editor GitAutoSync 영역 도달)
본 PM이 외부 영역에서 변경한 BT5-Dev 모든 영역을 EerieVillage git에 반영:
- EnemyController.cs (Distance 기반 감지·VisualBounds·IgnoreCollision·Bounds)
- PlayerEnemyCollision.cs (dyAtCollision·stomped 판정)
- PlayerController.cs (LastGroundedPosition·OnHealthDeath/Resurrect·자동 컴포넌트)
- DeathZone.cs (Coroutine·viewport 외 대기)
- Health.cs (invulnerableDuration 0.5·resurrectInvulnerableDuration 2.0·GrantInvulnerability·이벤트 3종)
- GameOptimizer.cs (신설·targetFrameRate·queriesHitTriggers·SetupOneWayPlatforms)
- PlayerInvulnerabilityFlash.cs (신설)
- ResurrectPromptUI.cs (신설)
- Player.prefab (Collider Size·Offset·m_FlipX 1)
- Enemy.prefab (m_IsTrigger 0)
- Hero1 sprite meta (combatidle 4종 rename)
- _archive/ 폴더 + 9 sprite 이동
- bak_2026* 28 파일 전수 삭제 (D 옵션)

원인 자인:
- 본 PM이 Unity 외부 영역 변경했지만 EerieVillage git commit X 영역 누적 = PD Editor에 도달 X = 옛 코드 동작
- C5·C44 위배

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 15:29:34 +09:00