유니티에서 게임 정지할 때에 보통 TimeScale을 0으로 조정해서 게임을 멈춘다.
이 TimeScale은 뭘까?
TimeScale은 실제 프레임과 DeltaTime에 대한 스케일 값을 조정하는 값이다.
기본적으로 1 값을 가지는데, 우리가 사용하는 DeltaTime 값은 사실 TimeScale을 곱한 값이다.
그래서, 우리가 TimeScale 값을 0으로 하면, 이 DeltaTime 값이 모두 0이 된다.
또한, FixedUpdate의 프레임도 0이 되어서 FixedUpdate 생명주기 함수도 작동하지 않는다.
그리고, 아래와 같은 것들이 작동하지 않는다.
- FixedUpdate()
- Rigidbody
- Animator
- Particle System
- Invoke(), WaitForSeconds()
따라서, 위와 같은 것들이 멈추기 때문에 마치 일시정지가 된 것처럼 느껴진다.
오늘로 길었던 팀 프로젝트가 끝나게 되었다.
그래서, 평소 궁금했던 TimeScale에 대해서 조사해 보았다만, 아직도 GameManager 스크립트에서 bool 값으로 게임 상태를 컨트롤하는 게 더 편한 것 같다.