using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; namespace ProceduralEditor { public class SceneTransitionController : MonoBehaviour { const string GameplaySceneName = "Landscape"; [Header("Fade")] [Tooltip("CanvasGroup on the Fade Image object.")] [SerializeField] private CanvasGroup fadeGroup; [Min(0f)] [SerializeField] private float fadeDuration = 0.75f; private bool transitionInProgress; public void LoadGameplayScene() { if (transitionInProgress) return; if (fadeGroup == null) { Debug.LogError($"{nameof(SceneTransitionController)}: Fade Group is not assigned."); return; } transitionInProgress = true; StartCoroutine(FadeThenLoadGameplayScene()); } private IEnumerator FadeThenLoadGameplayScene() { fadeGroup.gameObject.SetActive(true); fadeGroup.blocksRaycasts = true; fadeGroup.interactable = true; float startingAlpha = fadeGroup.alpha; float elapsed = 0f; while (elapsed < fadeDuration) { elapsed += Time.unscaledDeltaTime; float normalizedTime = Mathf.Clamp01(elapsed / fadeDuration); fadeGroup.alpha = Mathf.Lerp(startingAlpha, 1f, normalizedTime); yield return null; } fadeGroup.alpha = 1f; yield return null; Debug.Log($"Loading scene: {GameplaySceneName}"); SceneManager.LoadScene(GameplaySceneName); } } }