using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
//过渡
//场景卸载与加载
using UnityEngine.SceneManagement;
public class TransitionManager : Singleton<TransitionManager>
{
public CanvasGroup fadeCanvasGroup;
public float fadeDuration;
private bool isFade;
public void Transition(string from,string to)
{
if(!isFade)
StartCoroutine(TransitionToScene(from,to));
}
//协程?
public IEnumerator TransitionToScene(string from,string to)
{
yield return Fade(1);
yield return SceneManager.UnloadSceneAsync(from);//卸载
yield return SceneManager.LoadSceneAsync(to,LoadSceneMode.Additive);//加载并添加模式
//设置新场景为激活场景
Scene newScene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);//最后加载进的场景
SceneManager.SetActiveScene(newScene);
yield return Fade(0);
}
//淡入淡出场景
//1是黑,0是透明
private IEnumerator Fade(float targetAlpha)
{
isFade = true;
fadeCanvasGroup.blocksRaycasts = true;
float speed = Mathf.Abs(fadeCanvasGroup.alpha - targetAlpha) / fadeDuration;
while (!Mathf.Approximately(fadeCanvasGroup.alpha, targetAlpha))
{
fadeCanvasGroup.alpha = Mathf.MoveTowards(fadeCanvasGroup.alpha,targetAlpha,speed * Time.deltaTime);
yield return null;
}
fadeCanvasGroup.blocksRaycasts = false;
isFade = false;
}
}