Files

54 lines
1.7 KiB
C#
Raw Permalink Normal View History

2022-08-07 01:28:49 +03:00
using System.Collections;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class FadeHandler : MonoBehaviour
{
2022-11-13 16:31:43 +02:00
[Header("Components")]
[SerializeField] private Image _fadeImage = default;
[Header("Fading")]
[Range(0f, 5f)]
[SerializeField] private float _fadeDuration = 1.2f;
[Range(0f, 5f)]
private Coroutine _fadeTransitionCoroutine;
2023-08-28 02:38:39 +03:00
[SerializeField] private bool _fadeOnStart = true;
2022-11-13 16:31:43 +02:00
[HideInInspector] public UnityEvent onFadeEnd;
2022-08-07 01:28:49 +03:00
2022-11-13 16:31:43 +02:00
void Awake()
{
2023-08-28 02:38:39 +03:00
if (_fadeOnStart)
StartFadeTransition(false, 1.0f);
2022-11-13 16:31:43 +02:00
}
2022-08-07 01:28:49 +03:00
2022-11-13 16:31:43 +02:00
public void StartFadeTransition(bool fadeOut, float duration = default)
{
if (duration == 0)
duration = _fadeDuration;
if (_fadeTransitionCoroutine != null)
StopCoroutine(_fadeTransitionCoroutine);
_fadeTransitionCoroutine = StartCoroutine(FadeTransitionCoroutine(fadeOut, duration));
}
2022-08-07 01:28:49 +03:00
2022-11-13 16:31:43 +02:00
IEnumerator FadeTransitionCoroutine(bool fadeOut, float duration)
{
int fromAlpha = fadeOut ? 0 : 1;
int toAlpha = fadeOut ? 1 : 0;
_fadeImage.color = new Color(0, 0, 0, fromAlpha);
float elapsedTime = 0.0f;
float waitTime = duration;
//yield return new WaitForSecondsRealtime(0.2f);
while (elapsedTime < waitTime)
{
float fade = Mathf.Lerp(fromAlpha, toAlpha, elapsedTime / waitTime);
_fadeImage.color = new Color(0, 0, 0, fade);
elapsedTime += Time.unscaledDeltaTime;
yield return null;
}
_fadeImage.color = new Color(0, 0, 0, toAlpha);
_fadeImage.raycastTarget = false;
onFadeEnd?.Invoke();
onFadeEnd.RemoveAllListeners();
}
2022-08-07 01:28:49 +03:00
}