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 ✅
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 = 절벽 영역 검출 → 즉시 반대 방향
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 시각 검증
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 = 발 영역 지면 위 정합
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 명시)
본 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 = 안전