using DG.Tweening; using UnityEngine; namespace DDD { public class FadeUi : MonoBehaviour, IEventHandler, IEventHandler { private CanvasGroup _canvasGroup; private void Awake() { _canvasGroup = GetComponent(); _canvasGroup.alpha = 0f; _canvasGroup.gameObject.SetActive(false); EventBus.Register(this); EventBus.Register(this); } private void OnDestroy() { EventBus.Unregister(this); EventBus.Unregister(this); } public async void Invoke(FadeInEvent evt) { await _canvasGroup.DOFade(0f, evt.Duration) .SetUpdate(true) .AsyncWaitForCompletion(); _canvasGroup.blocksRaycasts = false; _canvasGroup.gameObject.SetActive(false); evt.CompletionSource.SetResult(true); } public async void Invoke(FadeOutEvent evt) { _canvasGroup.gameObject.SetActive(true); _canvasGroup.blocksRaycasts = true; await _canvasGroup.DOFade(1f, evt.Duration) .SetUpdate(true) .AsyncWaitForCompletion(); evt.CompletionSource.SetResult(true); } } }