Unity/트러블 슈팅

[Unity] Time.unscaledDeltaTime이 첫 프레임에 튀는 현상

turbulence93 2025. 6. 17. 20:30

1. 문제 상황

로딩씬 진입 후 Time.timeScale = 0 일때를 대비해서

Time.unscaledDeltaTime을 기반으로 페이더를 처리했을 때,
첫 프레임에서 비정상적으로 큰 값이 나와  페이더의 알파가 크게 튀는 현상이 생김


2. 원인 

  • Time.unscaledDeltaTime은 이전 프레임과의 시간 차를 기준으로 계산됨.
  • 하지만 특정 상황에서 프레임을 제대로 잡지 못하면 건너뛴 프레임이 한번에 계산되어 값이 뒴
  • 이는 특히 CanvasGroup의 fade 처리나 Lerp 기반 동작에서 치명적으로 작용.

3. 해결 방법

첫 프레임 방지용 변수 활용

  • Time.realtimeSinceStartup을 이용하여 현재 시간을 기준으로 시간을 계산
fadeStartTime = Time.realtimeSinceStartup;                         

while (fadeProgressTime < fadeInTime)
{
    fadeProgressTime = Time.realtimeSinceStartup - fadeStartTime;   

    fadeAlpha = Mathf.Clamp01(fadeProgressTime / fadeInTime);      

    currentAlpha.a = fadeAlpha;
    faderImage.color = currentAlpha;

    yield return null;
}

4. 개인적인 생각

UI 페이드나 시간 정밀도가 중요한 연출에서는 Time.unscaledDeltaTime을 쓰는거 보다, 
realTime을 이용하여 시간을 차를 계산하는것이 더 정확한거 같다.
로딩씬을 통해 미리 로딩을 하면 좋지만, 이 경우는 로딩씬에서 발생한 문제기 떄문에,
이런 경우 realTime을 통해 처리하는것이 깔끔한거 같다.