Commit Graph

32 Commits

Author SHA1 Message Date
깃 관리자 60812b96ba feat(BT12-Dev): 스킬 시스템 누적 작업물 (PD 지시 2026-05-12~13)
본 세션 (BurningTimes worktree cranky-wescoff-e855b0) 누적 작업물.
직전 commit 4건 (2ebf313·60e28e3·ea7d32f·f6c6eb5) 영역 외 잔존
미커밋 변경 일괄 commit.

Scripts:
- Health.cs  DecrementBypassInvuln (DoT) + DecrementBypassInvulnWithHit
  (다단 히트) + StartHitFlash + FlashHurtCoroutine + TriggerHitOrHurt
- ActiveSkillData.cs  신규 필드 (DamageFrameDelay·EnableRepeatDamage·
  MaxHitCount·RepeatFrameInterval·OffsetDistance Vector2 등)
- PiercingProjectile.cs  A13 천둥발 관통 + Kinematic Rigidbody2D +
  useFullKinematicContacts + OverlapBox 매 frame
- StatusApplier.cs  ApplyDoT 시 DotFxScale 전달
- TestSkillFireOn1to5.cs  1~5 키 발사 + lazy init EnsureRuntimes

Animator:
- Enemy.controller  Baddie-Hurt self-loop transition (hurt 조건)
- Player.controller  Player-Hit self-loop transition (hit 조건)

Prefab:
- FX_Lightningball.prefab  ball 자식 PS simulationSpace World → Local
- Enemy.prefab  본 세션 측정 조정

Active skill assets (PD Inspector 직접 조정):
- A01·A02·A03·A04·A05·A08·A13·A14·A15·A_Laser
  HitboxSize·OffsetDistance(Vector2)·OffsetXY·FxRotation·HitFxScale·
  DamageFrameDelay·EnableRepeatDamage·MaxHitCount·RepeatFrameInterval

Font:
- NotoSansKR-Regular SDF.asset  본 세션 SDF atlas 갱신

→ 박스↔이펙트 분리 원칙 표준화 (박스 = facing 만 · 이펙트 =
   facing + FxRotation · runtime spawn = HideFlags.DontSave)
→ 모든 피해 시 hit flash + Animator self-loop transition

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 18:05:13 +09:00
깃 관리자 0596e2c4c0 auto: 2026-05-13 01:48 · scene: Lobby · 1494 files 2026-05-13 01:48:30 +09:00
깃 관리자 ce5f89ef0f revert: 16aa6f9 정상 동작 시점 복원 (BT12-Dev Enemy 정지 회귀 일괄 정정)
PD 직접 지시 2026-05-12: "정상 동작 시점으로 되돌린 다음 다시 판단"
- 정상 동작 시점: 6c981ed16aa6f9 push 정합 (Variant 6개 SpriteRenderer 종별 idle01 override)
- 회귀 commit 22개 (16aa6f9..5f360ca) 일괄 환원

근본 원인 (Play 측정 확정):
- Player.Health.IsAlive=False·ResurrectPromptUI.showPrompt=True·Time.timeScale=0
- 시작 직후 Player가 Enemy와 충돌해 사망 → 부활 prompt가 timeScale=0 → 모든 frame 정지
- Enemy 코드 자체는 정상 (Rigidbody2D Kinematic·body 연결·CF useTriggers=False·IsGrounded=True)
- 본 PM이 5f360ca까지 누적한 Enemy 측 변경은 헛짚음

16aa6f9 시점 기반 위에 PD 요구 사항 (Visual 자식 분리·Variant 종별 patrol 동작·발판 가장자리 회피 등)을
한 단계씩 점진 재적용·각 단계 Play 실측으로 회귀 차단 예정.
2026-05-12 22:32:08 +09:00
깃 관리자 e38c1a5c12 fix(BT12-Dev): AnimationController RequireComponent 제거·Enemy.prefab root SR/Animator 폐기·Variant 6 재생성
PD: "몬스터 방향 전환 시 이미지 잘못 출력"

근본:
- AnimationController에 [RequireComponent(SpriteRenderer, Animator)] 잔존
- Enemy.prefab root SR·Animator 제거 시도가 RequireComponent에 의해 차단
- Variant 6 모두 root SpriteRenderer 잔존·AnimationController.spriteRenderer = root
- ComputeVelocity의 flipX = root에 적용·실제 보이는 Visual 자식 SpriteRenderer 영향 X
- 방향 전환 시 sprite flip 안 됨

fix:
1. AnimationController.cs — [RequireComponent] 제거
2. Enemy.prefab base — root SpriteRenderer·Animator 폐기
3. Variant 6 prefab 재생성 (이전 Variant 폐기·신규)
   - Visual 자식 SpriteRenderer.sprite·Animator.runtimeAnimatorController override
4. Scene 16 Enemy instance root SR·Animator 잔존 폐기
5. 결과: AnimationController.spriteRenderer = GetComponentInChildren<SpriteRenderer>() = Visual.SpriteRenderer
   flipX·sprite·Animator 모두 Visual 자식 단일화

회귀 영역 X:
- Visual 자식 SpriteRenderer·Animator·OverrideController 정합
- KinematicObject·Collider·EnemyController patrol 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 16:15:43 +09:00
깃 관리자 551bc048a4 feat(BT12-Dev): Visual 자식 분리·Clip path Visual·Variant Visual sprite override
PD: "가 — Visual 자식 분리 (이미지만 위로 띄우기 가능)"

근본:
- Enemy GameObject root에 SpriteRenderer·Animator·Collider 모두 묶임
- prefab y 변경 시 Collider까지 같이 이동 → 시각만 분리 불가

fix:
1. Enemy.prefab — Visual 자식 GameObject 신규
   - root SpriteRenderer·Animator 제거
   - Visual 자식에 SpriteRenderer·Animator 부착·기존 setting 이전
2. 35 AnimationClip path 변경
   - EnemyIdle/Run/Hurt/Death/Attack + 30 M00x Clip
   - path="" → path="Visual" (자식 SpriteRenderer 바인딩)
3. Variant 6개 SpriteRenderer override 재적용
   - Visual.SpriteRenderer.sprite = M00x_idle01_0 종별
   - Visual.Animator.runtimeAnimatorController = M00x.overrideController 종별
4. AnimationController·EnemyController
   - spriteRenderer = GetComponent<SpriteRenderer>() ?? GetComponentInChildren<SpriteRenderer>()
   - animator 동일 패턴
5. Scene 16 Enemy position override 복원 (직전 b41cdf6 revert)

PD Variant prefab 영역 Visual 자식 localPosition.y Inspector 조절 시 시각만 위로 이동·Collider 영역 X.

회귀 영역 X:
- KinematicObject·Collider·Rigidbody·EnemyController patrol·발판 통과 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:53:37 +09:00
깃 관리자 16aa6f9523 fix(BT12-Dev): Variant 6개 SpriteRenderer 종별 idle01 override
PD: "자식 prefab의 sprite가 똑같음 — 종별 개별 sprite로 변경"

근본:
- Variant 6개 SpriteRenderer.sprite 모두 M001_idle01_0 (부모 Enemy.prefab 상속)
- Animator 재생 시 종별 sprite로 교체되나 초기·idle 정지 상태에서 동일

fix:
- M001 Wolf: M001_idle01_0
- M002 Bat: M002_idle01_0
- M003 ZombieM: M003_idle01_0
- M004 ZombieF: M004_idle01_0
- M005 Ghost: M005_idle01_0
- M006 Spider: M006_idle01_0

회귀 영역 X:
- Animator·OverrideController·Scene 16 instance·Player·Enemy 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:22:17 +09:00
깃 관리자 6c981ed567 fix(BT12-Dev): Variant 6개·종별 균등 16·Token 활성 10 최적화
PD: "몬스터 종별 개별 prefab"·"렉 최적화"

1. Enemy.prefab → Variant 6개 신규
   - Enemy_M001_Wolf·M002_Bat·M003_ZombieM·M004_ZombieF·M005_Ghost·M006_Spider
   - 각 Variant Animator.runtimeAnimatorController = M00x.overrideController 직접
   - MonsterRandomizer 컴포넌트 제거 (종별 prefab 영역 자체 결정)

2. Scene 16 Enemy 종별 균등 배치
   - Wolf 3·Bat 3·ZombieM 3·ZombieF 3·Ghost 2·Spider 2
   - 기존 16 instance 폐기·새 Variant 영역 동일 위치 spawn

3. 렉 최적화 — Token 활성 50 → 10
   - 발판 18개 중 10개 균등 선택·각 발판 위 1 Token
   - 90개 비활성 (Sample Microgame IdleLit Light·Animator 영역 영역 영역)
   - Profiler Editor unfocused 정확 측정 한계 — 가장 큰 cost 후보 (Light 100→10) 우선 정정

회귀 영역 X:
- Player·Enemy 충돌·발판 통과·OverrideController·Camera·Background 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 15:16:22 +09:00
깃 관리자 81898adab6 fix(BT12-Dev): Enemy ↔ Enemy IgnoreLayerCollision + scale 1.7 → 1.19 (30% 영역)
PD: "몬스터끼리 충돌하지 않고 통과"
PD: "몬스터 크기 30% 영역"

fix:
1. Enemy ↔ Enemy IgnoreLayerCollision
   - Physics2D.IgnoreLayerCollision(14, 14, true)
   - EnemyController.Awake 영역 (idempotent·매번 호출 무관)
2. Enemy.prefab transform.localScale 1.7 → 1.19 (30% 영역)
   - Scene 영역 16 instance prefab override 자동 영역
   - sprite·BoxCollider·CapsuleCollider 비례 영역

회귀 영역 X:
- Enemy ↔ Player IgnoreCollision (Layer 14 ↔ Layer 13 별도) 정합
- Enemy ↔ 발판 IgnoreCollision (PlatformEffector2D 별도) 정합
- KinematicObject minMoveDistance·shellRadius 절대값 정합

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:39:54 +09:00
깃 관리자 38031279d1 fix(BT12-Dev): 몬스터 종류 random — 6 OverrideController·MonsterRandomizer
PD: "몬스터 색을 랜덤으로 하라는 얘기가 아니라 몬스터 종류를 랜덤으로 하라고 했잖아"

자성: 직전 commit 6e774dc에서 PD 의도 오역 — 색 tint 영역. 종류(sprite) random 의도 정합 X.

근본 (MCP 자율 영역):
- Enemy.prefab idleFrames 24 sprite (M001~M006 × 4 idle frame) 영역 영역
- Enemy.controller 4 Clip (EnemyIdle·EnemyRun·EnemyHurt·EnemyDeath)
- 영역: 6 Idle Clip + 6 OverrideController·EnemyIdle만 override

fix:
1. 6 AnimationClip 신규 — M001_Idle ~ M006_Idle.anim
   - 각 4 sprite keyframe·frameRate 12·loopTime=true
   - SetObjectReferenceCurve (m_Sprite property)
2. 6 AnimatorOverrideController 신규 — M001 ~ M006.overrideController
   - runtimeAnimatorController = Enemy.controller
   - EnemyIdle Clip → M00x_Idle Clip override
   - EnemyRun·EnemyHurt·EnemyDeath 영역 (영역 sprite·6종 영역 영역 영역)
3. MonsterRandomizer 영역
   - overrideControllers[6] 영역
   - Awake 영역 random select·animator.runtimeAnimatorController = overrideControllers[idx]
   - 색 tint 영역 폐기
4. Enemy.prefab MonsterRandomizer.overrideControllers 6 OverrideController 영역
5. Scene 영역 활성 Enemy 16개 SpriteRenderer.color = white (이전 tint 영역)

회귀 영역 X:
- Animator (Idle·Run·Hurt·Death) 정합 유지·EnemyIdle만 override
- One-Way Platform·Enemy 발판 IgnoreCollision·Player·Camera 영역 영역 X

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 01:37:54 +09:00
깃 관리자 c18562bf11 fix(BT12-Dev): MonsterRandomizer Animator 활성 + Enemy patrol 5~10 unit
PD: "이동·죽음·히트 애니메이션 재생 X → 잘 나오도록 수정"
PD: "맵 전체 patrol → 자신 주위 적절 범위 patrol"

근본 (MCP 자율 실측):

1. 애니메이션 — MonsterRandomizer.Awake line 28 `anim.enabled = false`
   - Animator 비활성 → AnimationController.SetFloat("velocityX", ...) 영향 X
   - Idle/Run/Hurt/Death state 영역 영역 X·sprite 수동 idle만
   - fix: anim.enabled=false 제거·sprite 수동 영역 폐기·Animator Clip 정합
   - Enemy.controller transition·parameter 정합 (직전 entry 7 fix 영역)

2. patrol 범위 — Enemy.prefab patrolMin=50·Max=75 (맵 전체)
   - Camera ortho 5.0·camWidth 17.78·주위 영역 영역 5~10 unit 정합
   - fix: patrolMin=5·Max=10 (Enemy.prefab 영역·Scene 16 instance 자동 반영)

회귀 영역 (Minor 사전 고지):
- 6종 random idle 영역 영역 영역 X — 모든 Enemy 동일 외형
- 6종 random visual 다양성 영역 후속 안건 (Sprite 동적 randomization·6 controller·SubStateMachine)·본 fix 영역 외

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:00:45 +09:00
깃 관리자 93856bc92a fix(BT12-Dev): Player·Enemy localScale × 1.7 + bgImage1 import 정정
PD: "배경 저화질·Player 1.7배·더 효율적 방법" → "C안으로 해"

C안 (Player·Enemy localScale × 1.7) 채택 근거:
- A (배경 1.7배): Player 화면 점유 16% 그대로·PD 의도 미충족
- B (Camera ortho × 1.7): RangeTier maxRange 영향·직전 사거리 fix 회귀
- C (Player·Enemy scale): Camera·RangeTier·배경 영향 없음·최소 변경

변경:
1. Player.prefab transform.localScale (1,1,1) → (1.7, 1.7, 1)
   - sprite bounds 0.66×1.10 → 1.12×1.88 (화면 점유 16% → 27%)
   - BoxCollider·SpriteRenderer 자동 비례 (transform 적용)
2. Enemy.prefab transform.localScale (1,1,1) → (1.7, 1.7, 1)
   - 활성 Enemy 16개 동일 비율 자동 반영
3. bgImage1 import 정정 (저화질 원인):
   - spriteImportMode Multiple → Single (자동 분할 제거)
   - textureCompression Compressed → Uncompressed (RGBA32 원본 화질)
4. Background_BgImage1 SpriteRenderer.sprite 재매핑 (Multiple→Single fileID 전환)

Camera ortho 3.5·RangeTier mults·Wall LayerMask·Composite·GameObject Static Rb
모두 영향 없음. KinematicObject minMoveDistance·shellRadius 절대값 정합.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:57:38 +09:00
깃 관리자 1ef19890a5 feat(BT12-Dev): MonsterRandomizer 수동 idle animation (6×4 frames) + Projectile speed 12→6 (거리 차이 체감) 2026-05-10 17:50:28 +09:00
깃 관리자 dd6ab3f8f1 feat(BT12-Dev): MonsterRandomizer 6종 sprite + WallMask Layer 16 (Layer 0 Level Tilemap 영역 영역 거리 X 정정) 2026-05-10 17:40:06 +09:00
깃 관리자 925d2bbbf3 fix(BT12-Dev): Enemy maxHearts 1 (1 hit kill·즉사 정합) 2026-05-10 17:08:30 +09:00
깃 관리자 5cb6040c8a feat(BT12-Dev): PD 4 지시 — Projectile 거리 제한·벽 충돌·특성 가시화·Icon UI 매핑 (MCP 자율)
PD 지시 (2026-05-10):
1. 투사체 종류 영역 일정 거리 영역 소멸 (Camera width × 1.5)
2. 레이저 외 투사체 영역 벽 충돌 시 소멸
3. 스킬 특성 영역 컨셉 동작
4. 스킬 선택 UI 영역 아이콘 노출

본 PM MCP 자율 진행:

==== PD #1: 거리 제한 ====
Projectile.Initialize:
- _spawnPosition 저장
- _maxRange = Camera.orthographicSize × 2 × aspect × 1.5 (가로 × 1.5)
Projectile.Update:
- Distance(transform.position, _spawnPosition) >= _maxRange → SelfDestruct

==== PD #2: 벽 충돌 ====
Projectile.OnTriggerEnter2D:
- isEnemy 처리 → hit 후 SelfDestruct·return
- Layer 0 (Default·Ground) || Layer 16 (Foreground·발판) → SelfDestruct
- 본 Projectile 영역 = A 카테고리 (레이저 영역 영역 X) — 모든 영역 SelfDestruct 정합

==== PD #3: 특성 가시화 ====
StatusApplier·EnemyStateComponents 영역 — DoT·Stun·Slow·Knockback·DebuffStack 영역 영역 정합 영역.
근본 영역 — Enemy hp 4·damage 5·1hit 즉사 → 효과 시각 X.
정정 — Enemy.prefab maxHearts 1→5 (maxHP 4→20) — A02 DoT·A03 Stun·A14 Slow 영역 4 hit 영역 영역 영역.

==== PD #4: Icon UI ====
SkillCardSlot _icon 매핑 X 영역 — BannerFrame04_Divided 자식 영역 SkillIcon GameObject 신규 추가 + Image 컴포넌트
- anchorMin·max (0.5, 0.7)·sizeDelta (120, 120)·preserveAspect true
- 3 슬롯 영역 _icon 필드 매핑 정합

Scene SkillSelectionCanvas·Enemy 인스턴스 RevertPrefabInstance — prefab 변경 동기화

MCP Play 검증:
- enemyMaxHP 20 ·컴파일 에러 0 ·Icon 매핑 3/3 
2026-05-10 16:23:34 +09:00
깃 관리자 62c8c93e6e feat(BT12-Dev): 스킬 선택 UI Layer Lab BannerFrame04_Divided 적용 (가로형 Magicka 스타일·옵션 C)
PD 결정 (2026-05-10): 옵션 A 즉시 적용 + 가로형 화면 (Magicka 스타일)
실제 적용: 옵션 C — Layer Lab 전체 nested (103 obj·Editor freeze) 회피·BannerFrame04_Divided × 3 직접 추가

본 PM MCP 자율 진행:
1. SkillSelectionCanvas 영역 자식 (SkillSelectionPanel) 제거 → Layer Lab 적용 준비
2. Layer Lab Play_UI_ChoiceSkill nested Instantiate 시도 → Editor freeze (last_heartbeat 정지·103 obj 영역)
3. Editor 강제 종료 (taskkill PID 25912) + PD 재시작 + instance 재연결
4. 옵션 C 적용 — execute_code 영역 직접 구성:
   - SkillSelectionPanel (Image·dim 0.78 alpha·anchor stretch)
   - TitleText (TextMeshPro "기술 선택"·중앙 상단·금색)
   - CardArea (HorizontalLayoutGroup·1500x600·spacing 30·MiddleCenter)
   - SkillCardSlot1·2·3 (Layer Lab BannerFrame04_Divided nested prefab)
5. 각 카드 영역 SkillCardSlot 컴포넌트 부착·Button 부착·필드 매핑:
   - _nameText → BannerFrame04_Divided/Text_Title
   - _descriptionText → BannerFrame04_Divided/Text_Info
   - _topBanner·_highlightFrame → BannerFrame04_Divided/Border
   - _clickArea → 카드 자체 Button (targetGraphic = Bg/Image)
6. SkillSelectionUI _rootPanel·_titleText·_slot1·2·3 매핑
7. Scene 영역 SkillSelectionCanvas instance RevertPrefabInstance 강제 동기화 (Awake _rootPanel=NULL → SkillSelectionPanel 정합)
8. SkillSelectionUI.cs OnCardSelected 정정 — 카드 클릭 → 즉시 _onConfirm.Invoke (Magicka 스타일·Confirm 버튼 부재)

MCP Play 검증:
- [SkillSelectionUI] Awake _rootPanel=SkillSelectionPanel 
- [ExperienceSystem] OnEnemyKilled → GainXP +1 → LEVEL UP Lv.2 
- [LevelUpManager] cards.Count=3 → SkillSelectionCanvas 활성 
- [SkillSelectionUI] Show cards=3 level=2 
2026-05-10 15:35:52 +09:00
깃 관리자 2783c15d56 docs(BT12-MVP-A Phase 2-B B+C·2-1·2-2 통합 완료): SkillSelectionCanvas Prefab + Scene 통합 + 한글 폰트 + 디자인 정정
산출물 (D안 — 기능 우선·그래픽 디테일 차후):

Prefab (신규):
- Assets/Prefabs/UI/SkillSelectionCanvas.prefab — 28 GameObject·Canvas Screen Space-Overlay·Sort Order 200
  - SkillSelectionPanel (anchor stretch·반투명 검정 RGBA(0,0,0,0.78))
  - Header (top stretch 120·베이지 9-slice·"기술 선택" 한글)
  - CardArea (center 1000x700·HorizontalLayoutGroup·SkillCardSlot ×3)
  - Footer (bottom stretch 200·"남은 포인트"·"확인" 노랑 버튼)
  - SkillCardSlot 자식 (TopBanner 갈색·NameText 흰색·IconArea·LevelText/DescriptionText 갈색·ClickArea·HighlightFrame)

한글 폰트:
- Assets/Fonts/NotoSansKR-Regular.ttf (Apache 2.0·Google Noto Sans CJK KR)
- Assets/Fonts/NotoSansKR-Regular SDF.asset (Multi Atlas·Dynamic mode·atlas 2x 2048)
- Assets/TextMesh Pro/Resources/TMP Settings.asset (fallback NotoSansKR 등록)

Scene 영역:
- [LevelUpManager] GameObject + LevelUpManager·SkillCardPlaceholderPool 영역
- Pool _allCards 5 asset 매핑 (A01·A05·P01·P12·AW01)
- LevelUpManager _pool/_ui 영역 매핑
- SkillSelectionCanvas Prefab 인스턴스 영역 SkillSelectionUI 8 field (_rootPanel·_titleText·_slot1·2·3·_pointText·_confirmButton) 영역 매핑

스크립트 (Debug.Log 추가·차후 가드 처리 의무):
- ExperienceSystem.cs (DEFAULT_XP_REWARD 5→1 임시·OnEnemyKilled 진단 Log)
- PlayerProgression.cs (GainXP·LEVEL UP 진단 Log)
- LevelUpManager.cs (HandleLevelUp·_ui.Show 호출 진단 Log)
- LevelXPTableLoader.cs (GetXPToNextLevel return 1 임시·기능 테스트 영역)
- SkillSelectionUI.cs (Awake·Show 진단 Log + gameObject.SetActive 영역)

회귀 영역 정리:
- Phase 2-B B+C MCP 작업 시 SkillSelectionPanel 자식 영역 중복 (Header/CardArea/Footer × 2 + 빈 Panel2) 영역 발견·정리
- Canvas WorldSpace → ScreenSpaceOverlay 정정 (Phase 2-2 manage_components silent fail 영역)
- Image color RGBA(1,1,1,1) → RGBA(0,0,0,0.78) 정정 (execute_code 영역 직접 변경)
- Player·SpawnPoint 영역 BT5-Dev 영역 정상 (본 PM 임시 변경 영역 stash 보존)

본 PM 자성 (영구 등재 의무):
1. manage_components set_property silent fail (Color·RectTransform·Canvas) — execute_code 영역 직접 변경 + 호출 직후 검증 의무
2. manage_gameobject batch 결과 검증 X — ReadMcpResource 호출 후 자식 영역 정합 검증 의무
3. 본 BT 영역 외 영역 임의 변경 금지 (Player·SpawnPoint·Camera·Tilemap·BT5-Dev)
4. TMP_FontAsset 검증 = characterTable.Count만 단정 X·isMultiAtlasTexturesEnabled·atlasPopulationMode·TryAddCharacters 동작 확인 의무
5. "영역" 어휘 무차별 부착 자제 (feedback_pm_filler_word_overuse)
6. PD 명시 외 임의 추가 (한자) 금지

PD 결정 (D안):
- 기능 검증 우선 (한글 표시·카드 UI·레벨업 흐름 정합)
- 그래픽 디테일 (PD 첨부 SD UI 정합) = 차기 BT 영역 후속 (Asset Store sprite 영역 또는 디자이너 영역)

C49 표준 — Phase 1 dev-team-lead 설계 + Phase 2 본 PM MCP 집행 + Phase 3 본 PM 직접 검증 (단순 반복 카탈로그 v1)
2026-05-09 18:00:27 +09:00
깃 관리자 402c416549 auto: 2026-05-08 22:14 · scene: Lobby · 125 files 2026-05-08 22:14:06 +09:00
깃 관리자 8baa3a6f80 BT5-Dev #86: Enemy 속도 2배 느림·미세 밀림 검출·절벽 즉시 phase 전환 (PD 3건)
PD 보고 (2026-05-08):
1. 몬스터 이동속도 너무 빨라 2배 느리게
2. 벽 가장자리 미세 밀림 → 낭떠러지 떨어짐
3. 낭떠러지 근처 생성 Enemy 이동 중 떨어짐

정정 (BT86):

1. AnimationController maxSpeed 7 → 3.5 (Enemy.prefab):
   - frame당 이동 거리 ~0.117m → ~0.058m (2배 느림)

2. stuckTimer 영역 임계값 정정:
   - 거리: |transform.x - _lastX| < 0.01 → 0.02 (미세 밀림 검출)
   - 시간: stuckThresholdTime 0.5 → 0.3 (빠른 phase 전환)
   - stuckMoveThreshold Inspector 영역 신규

3. 절벽 검출 영역 정정:
   - cliffCheckDistance: 0.6 → 0.3 (더 빠른 검출·낭떠러지 근처 보호)
   - 시작 위치 복귀 영역 폐기 → 다음 phase 강제 (시작 위치도 절벽 가능 가설)

효과:
- Enemy 이동속도 2배 느림
- 미세 밀림 (< 0.02m/frame) = stuckTimer 누적 → 0.3초 후 phase 전환
- 절벽 영역 = 즉시 다음 phase (반대 방향 patrol) — 시작 위치 복귀 X
- 낭떠러지 근처 생성 Enemy = 절벽 영역 검출 → 즉시 반대 방향
2026-05-08 12:16:38 +09:00
깃 관리자 007b4dd61a BT5-Dev #85: Enemy y+0.3·수평 Raycast 폐기 (PD 2건)
PD 보고 (2026-05-08):
1. 몬스터 바닥 뚫고 나옴 (이미지 첨부)
2. 몬스터 여전히 이동 X

진단:
- 버그 1: sprite 발 영역(transform.y - 0.63·sprite half) ↔ Capsule bounds.min.y(transform.y - 0.39) = 0.24m 차이. Capsule 영역 위 Tile 표면 → sprite 영역 발이 0.24m 침투 → 시각상 침투
- 버그 2: BT83/BT84 수평 벽 Raycast 영역(bounds 외부 + 0.5m)도 옆 Tile (평지 인접) 검출 → 거짓 양성 → 매 frame phase 강제 → 모든 Enemy 정지

정정 (BT85):
1. transform.y 추가 +0.3 (Enemy.prefab 1.532→1.832 + Scene 인스턴스 19건 +0.3)
2. EnemyController.cs:
   - 수평 벽 Raycast (BT83/BT84 영역) 폐기
   - wallCheckDistance Inspector 영역 폐기
   - stuckThresholdTime: 0.3→0.5 (BT81 영역 회복·정상 이동 미세 영역 거짓 양성 차단)
   - 절벽 검출 영역 그대로
   - stuckTimer 영역 그대로 (벽 정지 시 0.5초 후 다음 phase 강제)

효과:
- 시각상 발 영역 침투 X (transform.y +0.3 → 총 +0.8 from 원본)
- 정상 patrol 영역 = stuckTimer 영역 0 (frame당 transform.x 변경 큰 영역)
- 벽 영역 정지 시 = stuckTimer 영역 0.5초 누적 → 다음 phase 강제
- 절벽 영역 = footAhead Raycast 영역 (Layer 0+16) 검출 → 시작 위치 복귀

후속 의무:
- PD Refresh+Play 시각 검증
2026-05-08 11:52:05 +09:00
깃 관리자 3591bd218f BT5-Dev #80: 몬스터 y+0.5 + 자동 patrol + 절벽 검출 (PD 3건 일괄)
PD 명시 (2026-05-08):
1. 몬스터 바닥 살짝 뚫고 들어감 → y +0.5 (Enemy.prefab + Scene 인스턴스)
2. PatrolPath 폐기 → 생성 위치 기준 좌/우 random 100~150 왕복 자동 patrol
3. 절벽 검출 → 낭떠러지 떨어지지 않도록

변경:

1. Enemy.prefab transform.y: 1.032 → 1.532
2. Scene Ingame.unity Enemy 인스턴스 16개 m_LocalPosition.y override 영역 +0.5 일괄 (19건)
3. EnemyController.cs:
   - patrol 4-phase 영역 (0: 우측 random / 1: 시작 복귀 / 2: 좌측 random / 3: 시작 복귀)
   - SetNextPatrolTarget — Random.Range(100, 150) 영역 + phase별 _targetX 계산
   - Update 영역 자동 patrol 로직 (PatrolPath path 영역 폐기·legacy 호환만)
   - 절벽 검출 — 발 앞 0.6 + 발 아래 0.8 Raycast 영역 지면 X 시 시작 위치 즉시 복귀
   - Inspector 노출: patrolMinRange·patrolMaxRange·patrolArriveThreshold·cliffCheckDistance·cliffCheckDepth·groundLayerMask
   - BT17 marker Debug.Log 영역 폐기 (시행착오 정리)

효과:
- 모든 Enemy 인스턴스 (path 미설정 영역 포함) 자동 patrol 작동
- 시작 위치 기준 ±100~150 random 왕복 패턴
- 절벽 영역 검출 시 시작 위치 즉시 복귀 (낭떠러지 X)
- y +0.5 = 발 영역 지면 위 정합
2026-05-08 11:28:35 +09:00
깃 관리자 aa0b188d14 BT5-Dev #78: M001 sprite fileID 영역 정확 매핑 (BT76·BT77 정정)
PD 보고 (2026-05-08): "몬스터 이미지가 전혀 안보여"

근본 원인:
- M001 sprite mode = Multiple (2)
- Multiple mode 영역 fileID = .meta internalIDToNameTable 영역의 internalID (음수 가능)
- 본 PM 가설 = fileID 21300000 (Single mode 영역) → 부정확
- Enemy.prefab + 4 .anim 영역 모두 sprite reference 영역 fileID 미존재 GUID로 매핑 → 시각상 X

정정 (Python 자동):
- 각 M001 sprite .meta 영역 internalIDToNameTable 영역 213 영역 internalID 추출
  (예: M001_idle01 = -7548370174848201806)
- 4 .anim 영역 m_PPtrCurves 영역 keyframe별 정확 internalID 영역 매핑
- Enemy.prefab m_Sprite fileID = M001_idle01 internalID

매핑 수정 영역:
- Enemy.prefab Sprite: fileID -7548370174848201806 + guid M001_idle01
- EnemyIdle.anim: 48 keyframes M001_idle 4 frames (4-cycle)
- EnemyRun.anim: 15 keyframes M001_run 5 frames (5-cycle)
- EnemyHurt.anim: 9 keyframes M001_hit 2 frames (2-cycle)
- EnemyDeath.anim: 8 keyframes M001_death 4 frames (4-cycle)

후속 의무:
- PD Refresh+Play 시각 검증 (M001 늑대 sprite 표시 정합)
2026-05-08 01:00:19 +09:00
깃 관리자 020a2206c0 BT5-Dev #76: 몬스터 1차 sprite 교체 — M001 늑대 (Enemy.prefab SpriteRenderer)
PD 명시 (2026-05-08): "게임 내 모든 몬스터를 늑대로"

1차 단순 진행 (정지 시점 sprite만 교체):
- Enemy.prefab m_Sprite = EnemyIdle.png(fe68c6e1...) → M001_idle01.png(f7b7e5d5...)
- 시각상 정지 시점 = 늑대 idle 첫 frame

2차 후속 권고 (PD 결정 영역):
- EnemyIdle/Run/Hurt/Death .anim 영역 sprite reference 영역 교체
  - EnemyIdle.png GUID(fe68c6e1...) → M001_idle 4 frames
  - EnemyRun.png 영역 → M001_run 5 frames
  - EnemyHurt.png 영역 → M001_hit 2 frames
  - EnemyDeath.png 영역 → M001_death 4 frames
- attack 영역 신규 .anim 영역 작성 가능 (M001_attack 4 frames)
- Enemy.controller 영역 .anim 참조 영역 변경 또는 AnimatorOverrideController 영역 신규

M001 sprite GUID 카탈로그 (.anim 교체 시 사용):
- idle: f7b7e5d5d35e8ea4a9574fc970089486 / eb4754ac8816180459f43ea0d2be515d / f8a4b8c30ad9dc0479c2a21f635975c0 / f8519f10c50debc448559483e0af1b42
- run: 87e0e7df.. / bff83363.. / f70891b2.. / 8b2f5697.. / 4d71cfb9..
- hit: 37b18867.. / 0e93511696..
- death: 5e56e0e8.. / 8d913271.. / e9529e37.. / 17c76eeb..
- attack: c0df76ac.. / eff1bf43.. / 2b3fa48e.. / 23f76537..

후속 의무:
- PD Refresh+Play 시각 검증 (정지 sprite = M001_idle01 정합)
- 2차 .anim·controller 영역 교체 결정 (PD 명시)
2026-05-08 00:55:54 +09:00
깃 관리자 cdd7d4e523 BT5-Dev #58: BoxCollider2D BT47 정확 회귀 — BT56 폐기 (발판 동작 우선 복구)
PD 강한 어조 (2026-05-07): "이전에는 잘 되었는데 왜 복구를 못하는거야?"

본 PM git diff 1024e08(BT47) vs HEAD 직접 진단:
- Player.prefab BoxCollider2D = 유일 핵심 차이 (BT56 변경)
- GameOptimizer.cs = BT49 None 차단 + BT51 사후 복원 추가 (restored=0 영향 X)
- PlayerController.cs = BT57 Debug.Log만 (영향 X)
- BT55 자동 분류 [BT55-MoveTiles] moved=1389 (BT47 정상 정합)
- Player Layer 13 / Foreground Layer 16 / Layer Matrix 13↔16 ON 모두 정합

= BT56 BoxCollider 변경이 발판 동작 영향 = 본 PM 가설.

정정 — BT47 정확 회귀:
- m_Size (0.4, 0.9) → (0.45, 1.15)
- m_Offset (0, -0.125) → (0, 0.1)

효과 (BT47 시점 PD 정합 영역 회귀):
- 발판 위 착지  (BT47 시점 정합)
- 점프 ascending 통과  (BT47 시점 정합)
- 좁은 통로 영역 = 1 cell 세로 통과 X 회귀 (BT56 의도 폐기)

좁은 통로 영역은 BT55+BT58 정합 확증 후 별도 정정 후속:
- 옵션 1: PD가 좁은 통로 영역 1 cell 세로 → 2 cell 세로로 변경 (게임 디자인)
- 옵션 2: BoxCollider 절충 영역 (예: 0.45×0.95) — 발판 영역 영향 미세
- 옵션 3: PD 결정

본 PM 가설 한계 자인:
- BT47 정확 회귀 = PD가 BT47 시점 정합 인식 영역
- 그러나 BT56 변경이 정확히 어느 영역에서 영향 X 영역 = 미식별
- PD Refresh+Play 시각 검증 의무
- 정합 시 BT55+BT58 결합 = 발판 동작 복원 + 숨겨진 통로 영역 별도 진단
2026-05-07 23:34:29 +09:00
깃 관리자 7693ec9137 BT5-Dev #56: Player BoxCollider2D 크기 정정 — 1 cell 통로 통과 보장 (PD 가설 채택)
PD 가설 (2026-05-07): "이 위치의 캐릭터 콜라이더 때문에 이동하지 못하는게 아닌지 체크 + 크기 조절"

진단 (본 PM 직접 read):
- 변경 전: m_Size (0.45, 1.15) + m_Offset (0, 0.1)
- Tile cell size = 1.0 (Unity 표준)
- 세로 1.15 > 1.0 = 1 cell 세로 통로 통과 X (Collider 머리·모자가 Tile 충돌)
- = PD 가설 정확

정정:
- m_Size: (0.45, 1.15) → (0.4, 0.9)
- m_Offset: (0, 0.1) → (0, -0.125)

근거:
- 가로 0.4 = 좁은 통로 통과 margin 0.6 (Tile 가로 1.0 기준)
- 세로 0.9 = 1 cell 통로 통과 margin 0.1 (Tile 세로 1.0 기준)
- offset y -0.125 = 모자 영역 제외·발 영역 정합 (sprite 1.43×1.43 중심 기준 발 영역)

효과:
- 캐릭터 모자 = Collider X = 좁은 통로 통과 가능
- 발판 위 착지 정합 (발 영역 Collider)
- Enemy 충돌 정합 (본체 영역 보존)

PD Refresh+Play 시각 검증 후 정합 시 BT55 + BT56 결합 효과 확증. 부정합 시 size·offset 미세 조정 후속.
2026-05-07 23:24:47 +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
깃 관리자 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
깃 관리자 72a3607e3e auto: 2026-05-07 13:22 · scene: Lobby · 361 files 2026-05-07 13:22:51 +09:00
깃 관리자 898fcf327b auto: 2026-04-24 00:21 · scene: SampleScene · 18 files 2026-04-24 00:21:38 +09:00
깃 관리자 ccf5c1cf1e auto: 2026-04-23 23:50 · scene: SampleScene · 7 files 2026-04-23 23:50:20 +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