scenceFrom 当前场景 scenceTogo 跳转场景
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Teleport : MonoBehaviour
{
[SceneName]
public string scenceFrom;
[SceneName]
public string scenceToGo;
public void TeleportToScene()
{
TransitionManager.Instance.Transition(scenceFrom,scenceToGo);
}
}
渐出效果
在Panel上添加Canvas Group组件 控制Alpha,Blocks Raycasts进行射线阻挡
using System.Collections;
using System.Collections.Generic;
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(TransitionToScence(from,to));
}
private IEnumerator TransitionToScence(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);
}
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;
}
}