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 옵션 반드시 명시 |
'Unity > 트러블 슈팅' 카테고리의 다른 글
| Navmesh 2D 에서 생기는 이동 속도 문제 (0) | 2025.12.18 |
|---|---|
| [Unity] StateMachineBehaviour 정보 초기화 현상 (0) | 2025.07.22 |
| [Unity] 오브젝트 풀링 트러블 슈팅 (0) | 2025.07.09 |
| [Unity] InputAction의 performed 이벤트 사용 시 주의점 (0) | 2025.07.02 |
| [Unity] UI가 작동하지 않는 이유 (0) | 2025.06.27 |