CS0117·CS1061 영역 fix — Test assembly 영역 main 영역 internal 영역 접근 X:
- IsCloneFireActive·CloneFireOrigin·CloneFireFacingX·CLONE_DAMAGE_MULTIPLIER 4건 internal → public
MCP 검증 정합:
- refresh_unity (compile=request) → 컴파일 오류 0
- run_tests EditMode CloneSkillTests → 7/7 passed (0.7초·T01~T07 전수 green)
본 PM 자성 #5 누적 (C39-10): Test assembly 영역 internal 접근 영역 사전 실측 X (BT12-Dev-Clone α·β 영역 internal 영역 정의 시점)
OnPlayerSkillFired event 영역 외부 클래스 .Invoke() 직접 호출 불가 (C# event 의미 영역):
- PlayerSkillInventory: RaisePlayerSkillFired(runtime) public 메서드 추가 — 내부 OnPlayerSkillFired?.Invoke 영역 캡슐화
- ActiveSkillRuntime.Fire: _inventory.OnPlayerSkillFired?.Invoke(this) → _inventory.RaisePlayerSkillFired(this) 정정
본 PM 자성 #4 (C39-10 누적·feedback_new_code_existing_system_dependency_unmeasured 4회차):
- #1 CloneInstance namespace 추정 (Events 부재)
- #2 asmdef autoReferenced 영역 추정 (main reference 자동 X)
- #3 asmdef 메커니즘 사전 동작 검증 X (default assembly 격리)
- #4 C# event 외부 invoke 불가 영역 사전 실측 X
CloneInstance 영역 += -= 영역 정합 (구독·해제) — 정정 대상 X
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>
- PlayerSkillInventory.StartingCardIds (string[]) Inspector 필드 신규 — 기본 { "A02" }
- Start() 메서드 신규 — Resources 로드 완료 후 시점에 AddSkillByCardId 일괄 호출
- 다중 스킬 지원·잘못된 CardId 자동 skip (AddSkillByCardId LogWarning 정합)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>