PD 추가 진단 (스크린샷 + 발화): "게임 플레이 후 스크롤 되는 맵에
여전히 남아있는 상태야. 아마 스크롤 되며 연장되는 맵 영역이
초기화 되지 않는 것으로 예상 돼"
이전 commit ea239fe (3중 진입점 + FX clone prefix) 의 catch 누락
가능성 차단:
1. PlayerSkillInventory.DoCleanupStalePooledSpawns 영역
Resources.FindObjectsOfTypeAll → Scene.GetRootGameObjects + 재귀
변경. hideFlags hidden GO 누락 우려 제거·정확도 향상.
CollectStaleRecursive 신규 — 자식 트리 재귀 탐색.
IsStaleByName 헬퍼 — 이름 매칭 통합.
2. Projectile.Awake 신규 — _data == null && _runtime == null 상태
(= Initialize 미호출 잔존) 시 1 frame 유예 후 자기 destroy.
PlayerSkillInventory cleanup 누락 케이스 자체 정리 (2중 방어).
InfiniteHorizontalBackground·기타 컴포넌트 자식 부착된 잔존도
본 자가 destroy 로 catch.
측정 (Play 진입 직후):
- AfterSceneLoad static cleanup removed=0
- Awake cleanup removed=0
→ 이전 Play 잔존 = 0건 (Scene load·Awake 시점)
→ Hierarchy 영역 시각상 spawn = 자동 발사 진행 결과
후속: PD Refresh + Play → 화면 잔존 재확인 필요.
잔존 시 Console "[PlayerSkillInventory] ... removed=N" 로그 +
스크린샷 으로 본 PM 추가 진단.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PD 추가 보고: "여전히 씬을 실행할 때 이전에 생성 된 풀링 오브젝트가 남아있어"
직전 commit 01865b8 Awake cleanup 1회만 호출 — 진입점 보강.
강화 사항:
1. RuntimeInitializeOnLoadMethod(AfterSceneLoad) 정적 cleanup 추가
— Awake 보다 선행하는 Scene load 직후 진입점.
2. Awake cleanup 무조건 Debug.Log (removed=0 케이스도 호출 확인 가능).
3. DelayedCleanupCoroutine — Awake 후 1·3·10 frame 추가 cleanup
(다른 컴포넌트 Awake/Start spawn 케이스 catch).
4. StaleClonePrefixes 신규 — FX clone 7종 prefix 매칭
(FX_Fireball_Bullet·FX_Lightningball·FX_Dragonfire·FX_Thunder·
FX_SLASH·FX_PinkMagicArrow·Projectile_*).
5. DoCleanupStalePooledSpawns static 메서드 통합 — useImmediate 옵션
(정적 호출 시 DestroyImmediate·Awake 호출 시 Destroy).
측정 (Play 진입 직후):
- AfterSceneLoad static cleanup removed=0
- Awake cleanup removed=0
→ 이전 Play 잔존은 0건. Hierarchy 영역 보이는 spawn 은
현재 Play 의 정상 자동 발사 결과 (BaseCooldown Tick spawn) 로 추정.
후속: PD 재현 시나리오 (Stop→Play 또는 Editor crash 후 재실행 등)
직접 확인 필요. Console 영역 "[PlayerSkillInventory] ... removed=" 로그로
cleanup 호출·잔존 카운트 확인 가능.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PD 보고: "게임 플레이 중 종료했다가 다시 시작할 경우 이전 게임
플레이 중 생성 된 투사체가 여전히 남아있어. 게임을 재실행할 때
기존에 생성 된 풀링 오브젝트가 소멸될 수 있도록 수정해줘."
PlayerSkillInventory.Awake 시점 CleanupStalePooledSpawns 호출:
- Projectile 및 파생 (HomingProjectile·PiercingProjectile) component
부착 GameObject 전수 destroy
- 박스 시각화 name 5종 (Hitbox_Debug·ProjectileHitbox_Debug·
LaserHitbox_Debug·MeleeHitbox_Debug·Range_Debug) destroy
- Resources.FindObjectsOfTypeAll + scene.IsValid filter
(asset prefab 제외)
- removed 카운트 Debug.Log
기존 HideFlags.DontSave (60e28e3) 정합 외 추가 보험:
- DontDestroyOnLoad 경로 (코드베이스 검색 0건 — 방어 코드)
- Scene 영구 저장 누락 케이스
- 메모리 잔존 (Editor crash 후 재시작 등)
검증 (Play 모드):
- A02·A05 발사 후 spawn 카운트 6
- CleanupStalePooledSpawns 직접 호출 + 1 frame 후 카운트 0
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
신규 Effector 2종:
- PoisonSwampSpawner — Category C (PlacementPersistent)
· 가장 가까운 적 위치 spawn·6초 유지·BoxCollider2D isTrigger·Kinematic Rigidbody2D
· PoisonSwampInstance — OnTriggerStay 영역 적 마킹·PoisonedEnemyMarker 부착·duration 5초 갱신
· PoisonedEnemyMarker — 매 초 10 피해·FX_Venom_Spray 자식 spawn (DotFxPrefab)·duration 만료 시 자가 소멸
- SpiritFireSpawner — Category D (Minion)
· Player 자식 spawn·8초 유지·OverlapCircle radius 2.5
· SpiritFireInstance — 매 초 근접 적 5 피해·Time.unscaledTime 영역 lifecycle
SkillFireEvent.Execute switch 확장:
- PlacementPersistent case → PoisonSwampSpawner
- Minion case → SpiritFireSpawner
A06 독 늪 .asset 신규 — Category 2·BaseCooldown 10·BaseDamage 10·OnHitFxPrefab=FX_Venom_Swamp·OnDotFxPrefab=FX_Venom_Spray
A11 정령불 .asset 신규 — Category 3·BaseCooldown 15·BaseDamage 5·MinionLifetime 8·OnHitFxPrefab=FX_Rotating shield
SkillRuntimeFactory.AvailableCardIds — A06·A11 추가 (7→9종)
TestSkillFireOn1to5 — PoisonSwamp·SpiritFire 인스턴스 신규·Category 분기 추가 (CardId 기반 MeleeArea 분기 정합)
PD Inspector 영역 — Player.prefab TestSkillFireOn1to5 Skill1=A06·Skill2=A11 .asset drag&drop 필요.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- PlayerSkillInventory.StartingCardIds (string[]) Inspector 필드 신규 — 기본 { "A02" }
- Start() 메서드 신규 — Resources 로드 완료 후 시점에 AddSkillByCardId 일괄 호출
- 다중 스킬 지원·잘못된 CardId 자동 skip (AddSkillByCardId LogWarning 정합)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
작업 1 — 디버그 박스·사거리 박스 시각화 off (재활용 toggle):
- HitboxDebug.ShowDebugVisuals 정적 플래그 신규 (false 기본·true 설정 시 즉시 노출)
- Spawn·AttachSprite·SpawnRange·SpawnHitboxDebugChild 4 위치 SpriteRenderer.enabled 정합
- GameObject 자체는 정상 spawn → LiveHitboxSync 등 부착 코드 무영향
작업 2 — 레벨업 카드 풀 5종 한정:
- SkillRuntimeFactory.AvailableCardIds HashSet (A02·A13·A04·A05·A_Laser)
- RandomDraw3 영역 화이트리스트 필터 추가
- 미완성 placeholder (A01·A03·A08·A14·A15) 카드 풀 제외
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>