Unity/트러블 슈팅

[Unity] Fade가 끊기는 문제 해결

turbulence93 2025. 6. 18. 21:25

1. 문제 상황

씬 전환 시 사용하는 Fade 코루틴에서 페이드가 부드럽게 연결되지 않고 뚝뚝 끊김

 

문제코드

fade가 끊기는 현상
    private IEnumerator FadeOutHandler(Action onComplete)
    {
        fadeProgressTime = 0.0f;                      
        currentAlpha = faderImage.color;                

        yield return null;

        while (fadeProgressTime < fadeOutTime)
        {
            fadeProgressTime += interval;

            fadeAlpha = 1f - Mathf.Clamp01(fadeProgressTime / fadeOutTime);

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

            yield return new WaitForSecondsRealtime(interval);
        }

        currentAlpha.a = 0;
        faderImage.color = currentAlpha;

        yield return null;

        onComplete?.Invoke();
    }
}

2. 원인 분석

  • 페이드 아웃은 fadeAlpha 값을 1 → 0으로 서서히 줄이며 faderImage.color의 알파 채널에 반영하는 방식이다.
  • 1 → 0 간격을 시간 간격에 따라 interval로 페이드를 시킴
  • interval만큼 watiforsecond을 하기 때문에 사이 간격만큼 부자연스러워짐

3. 해결 방법

fadeStartTime = Time.realtimeSinceStartup;

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

    fadeAlpha = 1f - Mathf.Clamp01(fadeProgressTime / fadeOutTime); 
    currentAlpha.a = fadeAlpha;
    faderImage.color = currentAlpha;

    yield return null;
}

currentAlpha.a = 0;
faderImage.color = currentAlpha;
  • yield return null을 통해 프레임 마다 알파 값을 갱신
  • 시간이 아닌 조절될 알파의 양을 계산하여 페이드 진행

4. 개인적인 생각

1 → 0 으로 도달한다는 같은 결과를 도출하지만 그 과정에서 다양한 식과 다양한 과정이 도출되는구나 싶었다.

인터벌을 통해 간격자체를 계산하는 것도 공부를 해봤으니 다음에 필요한 곳이 있다면 사용할 수 있을것 같다.