Unity/트러블 슈팅

[Unity] 파티클 시스템 SetActive false -> true 이후 Prewarm 이슈

turbulence93 2025. 7. 21. 23:14

1. 문제 상황

  • 파티클 시스템에서 Prewarm 옵션을 켰음에도 불구하고,
  • particleSystem.Stop(); 이후 particleSystem.Play();를 호출하면
  • 파티클이 즉시 완성된 상태로 시작되지 않고, 마치 처음부터 재생되는 것처럼 보임
  • 결과적으로 Prewarm이 무시된 것처럼 동작

2. 원인 분석

Unity의 ParticleSystem은 다음 조건에서만 Prewarm을 적용합니다.

Play On Awake가 활성화되어 있을 것 초기화 시점에 자동 재생되는 경우에만 prewarm이 작동
Simulate(time, withChildren: true, restart: true) 사용 수동으로 재생하는 경우는 명시적으로 prewarm을 수행해야 함
단순히 Stop() 후 Play()만 하면 Prewarm은 다시 적용되지 않음 시스템 내부적으로 "이미 재생한 상태"로 인식함

3. 해결 방법

수동 Prewarm 시퀀스

particleSystem.Simulate(particleSystem.main.duration, true, true); // prewarm 효과
particleSystem.Play(true);
  • Simulate(duration, withChildren: true, restart: true) → prewarm 효과
  • Play() → 실제 재생

4. 결론

문제 Stop() 후 Play()만으로는 prewarm이 다시 적용되지 않음
원인 Unity는 한 번 재생된 시스템에 대해 prewarm을 생략함
해결 Simulate() → Play() 순서로 명시적 재초기화
Simulate() 시 restart = true, withChildren = true 옵션 반드시 명시