fix(BT12-Dev): Projectile unscaledTime — Time.timeScale=0 영역 영구 잔존 차단 (PD 지시 2026-05-13)
근본 원인: - Time.timeScale=0 (LevelUp 카드 선택 모드) 영역 Time.time 정지 → Invoke(SelfDestruct, lifetime) 영역 호출 X → 영원 잔존 - _spawnTime = Time.time 영역 = lifetime backup check 영역 영역 X fix: - _spawnTime = Time.unscaledTime (timeScale 무관) - Update 영역 lifetime check — Time.unscaledTime - _spawnTime > _lifetime 영역 강제 SelfDestruct - Wall grace period — Time.unscaledTime 영역 정합 - Invoke 폐기·CancelInvoke 추가 안전 (Initialize 영역 잔존 Invoke 차단) 본 PM 자성 #11 — Time.time vs Time.unscaledTime 영역 사전 측정 누락. Projectile 영역 lifecycle 영역 timeScale 영역 영향 영역 사전 측정 의무 누락. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b1931afa15
commit
705d943e38
|
|
@ -53,7 +53,8 @@ namespace EerieVillage.Skills.Effectors
|
|||
|
||||
// BT12-Dev 2026-05-10 (PD #1) — 거리 제한 영역 영역 spawn 위치 저장
|
||||
_spawnPosition = transform.position;
|
||||
_spawnTime = Time.time;
|
||||
// PD 지시 2026-05-13 — Time.timeScale=0 (LevelUp 카드 선택) 영역 Time.time 정지 → unscaledTime 영역 lifetime check 정합
|
||||
_spawnTime = Time.unscaledTime;
|
||||
|
||||
// PD 지시 2026-05-13 — 투사체 사정거리·속도 Inspector 직접 조절 (RangeTier·camWidth·mults 계산 폐기)
|
||||
_maxRange = (_data.MaxRange > 0.01f) ? _data.MaxRange : 10f;
|
||||
|
|
@ -84,11 +85,12 @@ namespace EerieVillage.Skills.Effectors
|
|||
else _baseAlphas[i] = 1f;
|
||||
}
|
||||
|
||||
// Phase 2-B: 풀링 미도입 — Invoke 기반 자동 소멸 (거리 제한 영역 영역 영역 영역 영역 안전망)
|
||||
Invoke(nameof(SelfDestruct), _lifetime);
|
||||
// PD 지시 2026-05-13 — Invoke 폐기 (Time.timeScale=0 영역 호출 X·영구 잔존 원인)·unscaledTime backup 영역 lifetime 영역 보장
|
||||
// CancelInvoke 호출 영역 추가 안전 (이전 영역 영역 Invoke 영역 잔존 차단)
|
||||
CancelInvoke();
|
||||
|
||||
// PD 지시 2026-05-13 — 진단 (회수 의무·잔존 추적)
|
||||
Debug.Log($"[Projectile][Initialize] name={name} dir=({_direction.x:F2},{_direction.y:F2}) speed={_speed:F2} maxRange={_maxRange:F2} lifetime={_lifetime:F2} t={Time.time:F2}");
|
||||
Debug.Log($"[Projectile][Initialize] name={name} dir=({_direction.x:F2},{_direction.y:F2}) speed={_speed:F2} maxRange={_maxRange:F2} lifetime={_lifetime:F2} t={Time.unscaledTime:F2}");
|
||||
}
|
||||
|
||||
// BT12-Dev 2026-05-13 — 사거리 80~100% 영역 scale·alpha 보간 (PD 지시)
|
||||
|
|
@ -134,10 +136,10 @@ namespace EerieVillage.Skills.Effectors
|
|||
return;
|
||||
}
|
||||
|
||||
// PD 지시 2026-05-13 — Invoke 영역 호출 X 영역 영역 안전망 (lifetime + 0.5초 영역 영역 강제 SelfDestruct)
|
||||
if (_spawnTime > 0f && Time.time - _spawnTime > _lifetime + 0.5f)
|
||||
// PD 지시 2026-05-13 — unscaledTime 영역 lifetime check (Time.timeScale=0 영역 Time.time 정지 영역 회피·재시작 시 영구 잔존 차단)
|
||||
if (_spawnTime > 0f && Time.unscaledTime - _spawnTime > _lifetime)
|
||||
{
|
||||
Debug.Log($"[Projectile][LifetimeForce] name={name} spawn={_spawnTime:F2} now={Time.time:F2} lifetime={_lifetime:F2}");
|
||||
Debug.Log($"[Projectile][LifetimeForce] name={name} spawn={_spawnTime:F2} now={Time.unscaledTime:F2} lifetime={_lifetime:F2}");
|
||||
SelfDestruct();
|
||||
return;
|
||||
}
|
||||
|
|
@ -162,8 +164,8 @@ namespace EerieVillage.Skills.Effectors
|
|||
}
|
||||
|
||||
// BT12-Dev 2026-05-10 (PD #2 fix·재발 정정 #2) — Wall OverlapPoint·useTriggers=false (CinemachineConfiner Trigger 영역 영역 영역).
|
||||
// grace period 0.05s 영역 spawn 시점 즉시 SelfDestruct 회피.
|
||||
if (Time.time - _spawnTime > 0.05f)
|
||||
// grace period 0.05s 영역 spawn 시점 즉시 SelfDestruct 회피·PD 지시 2026-05-13 unscaledTime 정합.
|
||||
if (Time.unscaledTime - _spawnTime > 0.05f)
|
||||
{
|
||||
var filter = new ContactFilter2D();
|
||||
filter.useTriggers = false; // Trigger collider (CinemachineConfiner 영역) 영역 영역
|
||||
|
|
|
|||
Loading…
Reference in New Issue