[Unity] Time.timeScale의 영향을 안받게 하기

Learning 

When: 1학년 6월 29일

 

How:

뱀서 라이크 게임을 개인 프로젝트로 만들던 중에 능력 3개 중 하나를 선택하는 기능을 구현하고 있었습니다. 그런데 그것을 고를 때는 Time.timeScale이 0이 되어야 하기 때문에 적이나 플레이어는 멈추지만, 선택하는 카드들은 하늘에서 뚝 떨어지는 연출을 하고 싶었기 때문에 그것을 구현하기 위해 파티클, 애니메이션, 코루틴 등이 timeScale의 영향을 받지 않게 하는 방법을 공부해 보게 되었습니다.

 

Understanding:

일단 카드를 고르는 장면에 Particle System, Coroutine, Animation, Audio가 전부 쓰였기 때문에 살짝 머리가 아팠지만 공부를 해보니 아래와 같은 설정을 해주면 어렵지 않게 timeScale의 영향을 안받게 할 수 있었습니다. (Audio는 timeScale이 0 이어도 제대로 작동을 합니다.)

ParticleSystem particleSystem.useUnscaledTime = true;
Coroutine yield return new WaitForSecondsRealtime(1f);
Animation animator.updateMode = AnimatorUpdateMode.UnscaledTime;

 

Result: 이런 식으로 파티클 시스템, 애니메이터의 timeScale 영향을 없앨 수 있고, Coroutine은 WaitForSecondsRealtime 메서드를 사용하여 영향을 받지 않게 할 수 있습니다. Audio는 timeScale의 영향을 받지 않습니다.