Unity异步加载场景
1、过渡场景
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Globe
{
public static string nextSceneName;
}
public class LoadingTest : MonoBehaviour
{
public Slider slider;//滑动条
public Text text;//文本
float loadPro = 0;
// 用以接受异步加载的返回值
AsyncOperation AsyncOp = null;
string names;
void Start()
{
slider.value = 0;
AsyncOp = SceneManager.LoadSceneAsync(Globe.nextSceneName, LoadSceneMode.Single);//异步加载场景名为"Demo Valley"的场景,LoadSceneMode.Single表示不保留现有场景
AsyncOp.allowSceneActivation = false;//allowSceneActivation =true表示场景加载完成后自动跳转,经测,此值默认为true
}
//点击按钮,开始加载下一场景,文本和进度条显示加载进度
//void StartLoad()
//{
// AsyncOp = SceneManager.LoadSceneAsync("nextSceneName", LoadSceneMode.Single);//异步加载场景名为"Demo Valley"的场景,LoadSceneMode.Single表示不保留现有场景
// AsyncOp.allowSceneActivation = false;//allowSceneActivation =true表示场景加载完成后自动跳转,经测,此值默认为true
//}
void Update()
{
if (AsyncOp != null)//如果已经开始加载
{
loadPro = AsyncOp.progress; //获取加载进度,此处特别注意:加载场景的progress值最大为0.9!!!
}
if (loadPro >= 0.9f)//因为progress值最大为0.9,所以我们需要强制将其等于1
{
loadPro = 1;
}
slider.value = Mathf.Lerp(slider.value, loadPro, 1 * Time.deltaTime);//滑动块的value以插值的方式紧跟进度值
if (slider.value > 0.99f)
{
slider.value = 1;
AsyncOp.allowSceneActivation = true;
}
text.text = string.Format("{0:F0}%", slider.value * 100);//文本中以百分比的格式显示加载进度
}
//#region 跳转场景
//public void TiaoZhuanSceneBtn(string scenename)//跳转场景
//{
// SceneManager.LoadScene(scenename);
//}
//public void LoadingBtn(string LoadName)//跳转加载场景
//{
// Globe.nextSceneName = LoadName;
// SceneManager.LoadScene("Loading");
//}
//#endregion
}
2、调用方法
public void LoadingBtn(string LoadName)//跳转加载场景
{
Globe.nextSceneName = LoadName;
SceneManager.LoadScene("Loading");
}