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 으로 도달한다는 같은 결과를 도출하지만 그 과정에서 다양한 식과 다양한 과정이 도출되는구나 싶었다.
인터벌을 통해 간격자체를 계산하는 것도 공부를 해봤으니 다음에 필요한 곳이 있다면 사용할 수 있을것 같다.
'Unity > 트러블 슈팅' 카테고리의 다른 글
| [Unity] null처리가 되었는데 Debug.Log에 출력 되는 현상 (0) | 2025.06.20 |
|---|---|
| [Unity] 생성자가 오브젝트 파괴후에도 참조되는 현상 (0) | 2025.06.19 |
| [Unity] Time.unscaledDeltaTime이 첫 프레임에 튀는 현상 (0) | 2025.06.17 |
| [Unity] 인벤토리 - 슬롯 선택 동작 오류 (0) | 2025.05.30 |
| [Unity] 발사체 반사 방향이 이상하던 문제 (0) | 2025.05.21 |