PD 지적: "enemy 랜덤풀에 플라잉 몬스터를 설정하는게 아니라
개별 몬스터 특성에 플라잉 속성을 부여해야하지 않을까?"
직전 commit 60c2e9b 의 2 위치 분산 (MonsterRandomizer.flyingFlags +
EnemyController hardcoded "M002") 정정. SOT 단일화.
설계:
- EnemyController.flyingControllerNames string[] (Inspector 기본
{ "M002" }) — 개별 몬스터 특성 IsFlying 속성 단일 SOT
- EnemyController.RecheckFlyingFromAnimator() public method 신설
· Animator.runtimeAnimatorController.name 영역 flyingControllerNames
list 매칭 → IsFlying=true 자동
· control.gravityModifier=0·velocity=0·ignoreCollisions=true 일괄
- EnemyController.Awake + Start 영역 RecheckFlyingFromAnimator 호출
- MonsterRandomizer.Awake 영역 controller random 후 위임 호출만
폐기:
- MonsterRandomizer.flyingFlags bool[] (분산 SOT 폐기)
- MonsterRandomizer name fallback "M002" hardcoded (분산 폐기)
- EnemyController.Awake 직접 hardcoded "M002" check (분산 폐기)
확장: 후속 공중 몬스터 추가 (예: 까마귀 M005) 시 PD Inspector
flyingControllerNames 배열에 controller name 추가만 하면 자동 적용.
검증 (Play 모드):
- 총 Enemy 16기 · M002 박쥐 3기 모두 IsFlying=True
- M005 등 비박쥐 IsFlying=False · gravMod=1 (지상 정상)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PD 추가 보고 + 스크린샷: "여전히 박쥐 몬스터가 공중에 떠있지 않고
움직이지도 않아"
진단 결과: Enemy.prefab 영역 MonsterRandomizer 부착 X · Animator
직접 M002.overrideController 부착. 직전 commit 6be8ccd 의
MonsterRandomizer flyingFlags / name fallback 영역 발화 X →
IsFlying=False 잔존 → gravity·collide 정상 적용 → 박쥐 지상 정지.
정정:
- EnemyController.Awake 영역 Animator.runtimeAnimatorController.name
"M002" 포함 시 IsFlying=true 자동 set
- 기존 MonsterRandomizer name fallback 도 보존 (랜덤 케이스 대비)
검증 (Play 모드):
- Enemy 16기 중 박쥐 3기 모두 IsFlying=True·ignoreCollisions=True·
gravMod=0 자동 set
- 1기 velocity=(-3.50, 0) patrol 이동 중·2~3기 wait 상태 정합
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PD 보고:
1. "Enemy_M002_Bat 몬스터는 날으는 몬스터이기 때문에 y위치를 높이고
싶은데 자꾸 땅으로 내려오는 현상을 수정해줘."
2. "이 몬스터가 이동하지 못하는 이유를 체크해보고 수정해줘."
원인 진단:
1. KinematicObject.FixedUpdate L107 else 분기 (velocity.y>=0)
gravityModifier 무시·무조건 Physics2D.gravity 적용
→ 박쥐 gravityModifier=0 해도 천천히 떨어짐
2. EnemyController.UpdatePatrol cliffCheck Raycast 영역 공중 박쥐
발 밑 ground 없음 → 즉시 TriggerReverse → 1초 cooldown 후 다시
검출 → 무한 좌우 반전 → 이동 0
3. EnemyController.Update L361 fallThreshold 떨어짐 검출
→ 강제 텔레포트 _startY 복귀
정정:
1. KinematicObject.FixedUpdate else 분기에도 gravityModifier 곱
gravityModifier=0 → 자연 중력 무효 (Player gravityModifier=1 영역
영향 X·기존 동작 보존)
2. EnemyController.IsFlying bool 신규 (Inspector)
- Awake 영역 IsFlying=true → control.gravityModifier=0·velocity=0
- UpdatePatrol cliffCheck 영역 !IsFlying 분기 (cliff skip)
- Update 떨어짐 텔레포트 영역 !IsFlying 분기 (skip)
3. MonsterRandomizer.flyingFlags bool[] 신규 (Inspector·동일 length)
- Awake 영역 random idx · flyingFlags[idx]=true → EnemyController.IsFlying=true 자동 set
검증 (Play 모드):
- IsFlying=true 강제 set + y +3 이동
- [t=0] pos.y=0.50 · gravMod=0
- [t=3s] pos.y=0.50 (유지·떨어짐 X) · velocity=(-3.50, 0) (x patrol 이동·y 0)
PD 후속: Enemy.prefab Inspector MonsterRandomizer.flyingFlags 영역
박쥐 (M002) idx 영역 true 설정 필요.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PD: "몬스터도 발판 자유 통과"
PD: "몬스터 랜덤 변경"
근본 (MCP 자율 실측):
1. Enemy 발판 통과
- Layer 14 (Enemy) ↔ Layer 0 (발판) collide=True → Enemy 발판 영역
- PlatformEffector2D surfaceArc 170°·옆 영역 통과·발판 위 영역 영역
- fix: EnemyController.Awake 영역 PlatformEffector2D 영역 IgnoreCollision 일괄 등록
→ Enemy 16개 × 발판 17개 모두 IgnoreCollision·발판 영역 영역 X·자유 통과
2. 몬스터 랜덤
- 직전 MonsterRandomizer 폐기 (Animator 영역)
- 영역 영역 — 6 Override Controller·24 Clip 신규 영역 영역 영역 영역 영역
- 영역 — SpriteRenderer.color 6 random tint
White·Red·Green·Blue·Yellow·Purple·Awake 1회 random
- Animator (Idle·Run·Hurt·Death) 정합 유지·sprite swap X·tint만 영역
- 영역 영역 영역·영역 영역 영역 영역
회귀 영역 X:
- One-Way Platform·Player 영역 영역 X·Camera·Wall LayerMask·Composite 정합
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>