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을 통해 처리하는것이 깔끔한거 같다.
'Unity > 트러블 슈팅' 카테고리의 다른 글
| [Unity] 생성자가 오브젝트 파괴후에도 참조되는 현상 (0) | 2025.06.19 |
|---|---|
| [Unity] Fade가 끊기는 문제 해결 (0) | 2025.06.18 |
| [Unity] 인벤토리 - 슬롯 선택 동작 오류 (0) | 2025.05.30 |
| [Unity] 발사체 반사 방향이 이상하던 문제 (0) | 2025.05.21 |
| [Unity] MonoBehaviour 생성자 오류 (0) | 2025.05.20 |