기본 패턴
csharp
Time.timeScale = 0f;
pauseTimer += Time.unscaledDeltaTime;
yield return new WaitForSecondsRealtime(1f);설명
Time.timeScale은 게임 세계의 시간 흐름 전체를 느리게 하거나 멈추는 전역 배율입니다. 슬로모션, 일시정지, 연출 제어에서 자주 씁니다.Time.deltaTime은 이 배율의 영향을 받지만,Time.unscaledDeltaTime은 영향을 받지 않습니다. 그래서 pause 중에도 돌아야 하는 UI 애니메이션, 메뉴 타이머, 네트워크 timeout 표시에 자주 필요합니다.- 코루틴에서도
WaitForSeconds는 timeScale 영향을 받고,WaitForSecondsRealtime는 영향을 받지 않습니다. 이름은 비슷하지만 용도가 다릅니다. - 일시정지를 만든다고 해서 모든 시스템을 같은 시간 축에 묶을 필요는 없습니다. "멈춰야 하는 게임플레이"와 "계속 돌아야 하는 UI/시스템"을 분리하는 것이 핵심입니다.
- timeScale은 강력한 도구이지만 오디오, 애니메이터, 물리, UI까지 전부 같은 방식으로 멈춘다고 단순화하면 곧 예외 처리가 쌓입니다.
빠른 정리
| 항목 | timeScale 영향 |
|---|---|
Time.deltaTime | 받음 |
Time.unscaledDeltaTime | 받지 않음 |
WaitForSeconds | 받음 |
WaitForSecondsRealtime | 받지 않음 |
| 적합한 용도 | pause UI는 unscaled 계열, 게임플레이는 scaled 계열 |
주의할 점
pause 구현에서 가장 흔한 실수는 timeScale = 0만 걸고 모든 타이머가 왜 멈췄는지 뒤늦게 발견하는 것입니다.
메뉴 애니메이션, 카운트다운, 툴팁, 로딩 표시는 어떤 시간 축을 따라야 하는지 먼저 분리하는 편이 좋습니다.
참고 링크
3 sources