Commit Graph

17 Commits

Author SHA1 Message Date
깃 관리자 bf5a89c6cb BT5-Dev #70: Drop-Through 발판 위 검증 추가 (지면 위 점프 버그 정정)
PD 보고 (2026-05-08): "아래가 뚫려있지 않은 지형에서 아래로 점프 시도 시 점프가 되지 않는 버그"

근본 원인:
- BT69 코드: Down + Jump 입력 시 무조건 dropThroughTimer + dropThroughJump 활성
- ComputeVelocity: dropThroughJump=true 시 velocity.y=0 강제 (위 점프 X)
- = 지면(Layer 0) 위 Down + Jump → velocity.y=0 → 점프 자체 차단

정정 (Update 영역에 발판 위 검증 추가):
- Down + Jump 입력 시 footHit Raycast (Layer 16 mask 0.1m 아래)
- onJumpThroughPlatform = (footHit.collider != null)
- Drop-Through 발동 조건: downHeld AND onJumpThroughPlatform
- = 발판(Layer 16) 위만 Drop-Through 발동
- = 지면(Layer 0) 위 = 일반 점프 (velocity.y = jumpTakeOffSpeed)

효과:
- 발판 위 + Down + Jump → 발판 통과 + 점프 모션 + 자연 낙하 (BT69 영역 그대로)
- 지면 위 + Down + Jump → 일반 점프 (위로)  (정정)
- Down 미입력 + Jump → 일반 점프 (그대로)

후속 의무:
- PD Refresh+Play 시각 검증
- 정합 시 BT69 + BT70 결합 = Drop-Through Input 패턴 영구 채택
2026-05-08 00:28:29 +09:00
깃 관리자 643d1ae9a0 BT5-Dev #69: Down + Jump Drop-Through 입력 추가 (PD 명시 채택)
PD 명시 (2026-05-08): "발판과 같이 아래가 뚫려있고 이동 가능한 영역이 있는 경우, 아래 방향키 상태로 점프하면 점프 모션과 함께 내려올 수 있도록"

표준 platformer 패턴 (Drop-Through Input):
- Player가 발판(Layer 16) 위 + Down 방향키 + Jump 키 동시 입력
- = Layer 16 mask 강제 OFF (DROP_THROUGH_DURATION=0.3초) → 발판 통과
- = velocity.y = 0 (위 점프 X·gravity로 자연 낙하)
- = jumpState = PrepareToJump (점프 애니메이션 발동·시각상 점프 모션)

변경 (PlayerController.cs 3영역):
1. 클래스 변수 추가:
   - float dropThroughTimer (Layer 16 mask 강제 OFF 지속 시간)
   - const float DROP_THROUGH_DURATION = 0.3f
   - bool dropThroughJump (본 frame Drop-Through 점프 발동 분기)

2. Update 영역:
   - Move Input 영역 y < -0.5 (Down) + Jump WasPressed → dropThroughTimer 활성 + dropThroughJump=true
   - 매 frame dropThroughTimer 감소 (Time.deltaTime)

3. UpdateContactFilterForDropThrough 영역:
   - isJumpingThrough 조건에 dropThroughTimer > 0 추가
   - Drop-Through 활성 시 Layer 16 mask 강제 OFF

4. ComputeVelocity 영역:
   - jump && IsGrounded 시 dropThroughJump 분기:
     - dropThroughJump → velocity.y = 0 (위 점프 X)
     - else → velocity.y = jumpTakeOffSpeed (기존 정상 점프)

효과 (PD 의도 정합):
- 일반 점프 (Jump only) = 위로 점프 (그대로)
- Drop-Through (Down + Jump) = 발판 통과 + 점프 모션 + 자연 낙하
- 0.3초 후 mask 자동 복원 (다른 발판 위 정상 착지 가능)

후속 의무:
- PD Refresh+Play 시각 검증 (발판 위 + Down + Jump → 통과·낙하 + 점프 애니메이션)
- 정합 시 BT49~BT65 영구 폐기 + R2 + BT68 + BT69 영역 영구 채택
2026-05-08 00:26:12 +09:00
깃 관리자 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
깃 관리자 609ef5c57b BT5-Dev #57: Drop-Through 진단 Debug.Log 추가
PD 보고 (2026-05-07): "발판을 다시 통과해서 이동하거나 점프할 수 없게 되었어"

본 PM 알고리즘 영역 진단 결과 (모두 정합):
- BT55 자동 분류 [BT55-MoveTiles] moved=1389 (BT47 정합)
- Player Layer 13 / Foreground Layer 16
- Layer Matrix 13 ↔ 16 충돌 ON
- PlayerController.UpdateContactFilterForDropThrough 표준 패턴

= 알고리즘 영역 정합 + PD 보고 점프 X = 본 PM 미식별 영역.

BT57 진단 Debug.Log 추가:
- 출력 시점: 점프 시점 (jump || PrepareToJump || Jumping || InFlight velY>0.5)
- 출력 영역: jumpState·velocity.y·standingOnPlatform·mask16(Layer 16 mask)·transform.y·bounds.min.y
- log spam 방지 (점프 시점만)

PD Refresh+Play 후 본 PM Editor.log [BT57-DropThrough] direct read 후 진단:
- jumpState 영역 정상 전환 검증 (Grounded → PrepareToJump → Jumping)
- mask16 = false (ascending 시 mask OFF) 확증
- standingOnPlatform 영역 정상 검출 검증

알고리즘 정합 + 진단 결과로 후속 정정 영역 결정.
2026-05-07 23:30:56 +09:00
깃 관리자 41c4b9e506 BT5-Dev #43: IsGrounded 영역 폐기·footHit 단독 + 점프 영역 OFF 강제 (시작 떨어짐 차단)
PD 보고: 시작 시 떨어짐

자인:
- BT42 IsGrounded 조건 영역 → 게임 시작 frame 0 IsGrounded=false (KinematicObject 영역 영역 영역 PerformMovement 결과) → standingOnPlatform=false → mask OFF → 발판 영역 영역 → 떨어짐

정정:
- IsGrounded 조건 폐기
- footHit 단독 판정 (Player 발 ↓ 0.1m raycast Layer 16 hit → 발판 위 영역)
- 점프 영역 (jumpState=Jumping || InFlight+velocity.y>0) → standingOnPlatform=false 강제 (점프 시작 시 발판 영역 차단)

동작:
- 게임 시작 → footHit 영역 (Player 발판 위 영역) → standingOnPlatform=true → mask ON → 정착
- 걷기 옆 (footHit X) → standingOnPlatform=false → mask OFF → 통과
- 점프 (Jumping/InFlight+상승) → standingOnPlatform=false 강제 → mask OFF → 통과
- 하강 후 발판 위 (footHit) → standingOnPlatform=true → 착지
2026-05-07 18:28:29 +09:00
깃 관리자 fc243453fe BT5-Dev #42: 걷기·측면도 통과 (Player 발 raycast로 standingOnPlatform 판정)
PD 보고: 점프 통과 동작 + 추가 의도 — '바닥에 깔린 상태가 아니라 걸쳐져서 지나가는 상황'

해석:
- 발판 위 착지(서있는) = 발판 영역 영역 X (정합)
- 그 외 (걷기·옆에서 닿음·점프·하강) = 통과

정정:
- UpdateContactFilterForDropThrough: Player 발 ↓ raycast(0.1m, Layer 16 mask) hit + IsGrounded → standingOnPlatform=true
- standingOnPlatform=true → Layer 16 mask 영역 ON (발판 영역 영역 X = 영역 영역 영역)
- 그 외 → Layer 16 mask OFF (걷기·점프·측면 모두 영역)

PrepareToJump 즉시 mask OFF (BT41) 영역 그대로 — 점프 시작 frame 영역 발판 영역 영역 차단

동작:
- 발판 위 정착 영역 = 영역 영역 ON = 안 떨어짐
- 발판 옆 걷기 영역 = footHit X 영역 OFF = 통과
- 점프 영역 영역 = IsGrounded=false 영역 standingOnPlatform=false → Layer 16 OFF = 통과
- 점프 후 발판 위 착지 = footHit + IsGrounded → standingOnPlatform=true → 다음 프레임 영역 영역 영역
2026-05-07 18:26:54 +09:00
깃 관리자 b6baec20de BT5-Dev #41: PrepareToJump 즉시 mask OFF + jumpState=Jumping 영역 ascending 판정
PD 보고: 여전히 발판 통과 X (BT40 적용 정합이지만 동작 X)

진단:
- PrepareToJump frame: velocity.y = 0 (ComputeVelocity 영역 영역 영역 적용 X) → ascending=false → mask Layer 16 ON → body.Cast 발판 영역 충돌 → 영역 frame 영역 영역
- 다음 frame: velocity.y > 0 → mask OFF → 통과. 그러나 이미 영역 frame 영역 영역 영역

정정:
- PrepareToJump case 영역 영역 즉시 contactFilter mask Layer 16 OFF (frame 지연 차단)
- UpdateContactFilterForDropThrough: ascending = velocity.y > 0.01 || jumpState == Jumping (jumpState 영역 영역 영역 영역 영역 정합)

영역 frame 영역 PrepareToJump → Jumping 영역 영역 영역 mask 영역 OFF 유지 → body.Cast 영역 영역 영역 영역 영역
2026-05-07 18:23:46 +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
깃 관리자 48f1084504 BT5-Dev #39: 점프 시작 시 Coroutine 0.3초 IgnoreLayerCollision (Physics step 지연 차단)
PD 보고: 발판 통과 X 여전 (BT38 매 프레임 토글 영역 동작 X)

진단:
- Unity Physics2D.IgnoreLayerCollision = 변경 즉시 적용 X, 다음 Physics step 영역만 적용 (한 frame 지연)
- Update에서 매 프레임 velocity.y 토글 → 점프 시작 frame 영역 영역 발판 영역 영역 충돌 발동 → 다음 frame 영역 통과 적용 → 이미 영역 영역

정정:
- UpdateJumpState 영역 PrepareToJump → StartCoroutine(JumpThroughRoutine)
- Coroutine: IgnoreLayerCollision(13, 16, true) → 0.3초 대기 → false 복구
- 0.3초 = 점프 정점 도달 시간 → 하강 시점 자동 충돌 ON → 착지 정합
- 매 프레임 Update 토글 영역 폐기

동작:
- 점프 시작 → 즉시 Layer 16 통과 (Coroutine 시작 + 0.3초 영역)
- 0.3초 후 (정점 도달·하강 시작) → 충돌 ON → 발판 위 착지
2026-05-07 18:11:09 +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
깃 관리자 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
깃 관리자 1570aaf657 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 변환 의무
2026-05-07 17:23:14 +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
깃 관리자 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
깃 관리자 b5ef4d5f05 BT7-Plan Phase 1: VS 순수형 자동 발동 + 하트 분할 시스템
- PlayerAttackTicker.cs 신설 (주기 타이머 자동 발동, SRP 분리)
- PlayerAttack.cs 주석 재작성 (수동→자동 전환 명시)
- Health.cs: maxHearts 필드 + IncreaseMaxHearts·Heal 메서드 (하트 1개=4쿼터 HP)
- PlayerController.cs: Attack 입력 로직 제거, Facing public
- AttackHitbox.cs: Decrement(damage) 통합
- InputSystem_Actions.inputactions: Attack 액션·바인딩 완전 제거
- PlayerAttackTests.cs: 10→13 (maxHearts·Ticker·InputActions 부재 검증)

BT 레포 commit 3bdda53 연계 (BurningTimesAi main)
2026-04-24 16:22:13 +09:00
깃 관리자 a10c38605d auto: 2026-04-23 23:47 · scene: SampleScene · 20 files 2026-04-23 23:47:51 +09:00
깃 관리자 9f689c1661 initial: Unity 6000.3.13f1 LTS 2D PlatformerMicrogame 템플릿 + GitAutoSync Editor 스크립트
- Unity 2D PlatformerMicrogame 기본 템플릿 자산 전수
- Assets/Editor/GitAutoSync/GitAutoSync.cs — BT5-Dev C안 Unity Editor 자동 sync trigger
  · InitializeOnLoad → auto pull · quitting → auto push · Tools/Git Menu 수동 옵션
  · 실제 git 작업은 BT 본 레포 scripts/unity_auto_sync.sh 가 수행 (Process.Start 호출)
- .gitignore — Unity 표준 (Library/·Temp/·Logs/·UserSettings/·IDE·빌드 산출물 제외)

조직: BurningTimes / 프로젝트: EerieVillage (기묘한 고을 : 조선퇴마뎐)
근거: PD BT5-Dev C안 승인 (2026-04-23)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 00:58:44 +09:00