异步加载场景分为A、B、C三个场景
A场景是开始场景;B场景是加载场景(进度条加载显示);C场景是目标场景
在A场景中添加一个按钮
public void StartGameButton_OnClick() { //保存需要加载的目标场景 Global.nextSceneName = "01"; SceneManager.LoadScene("LoadingScene"); }
在B场景中添加一个脚本,挂载到Camera下
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class LoadingScene : MonoBehaviour {
public Slider loadingSlider; //进度条控件 public Text loadingText; private float loadingSpeed = 1; private float progressValue; private AsyncOperation AsyOper; void Start () { loadingSlider.value = 0; //初始进度条为0 if(SceneManager.GetActiveScene().name=="LoadingScene") { //启动协程 StartCoroutine("AsyncLoadingScenes"); } } IEnumerator AsyncLoadingScenes() { AsyOper = SceneManager.LoadSceneAsync(Global.nextSceneName); //阻止当加载完成自动切换 AsyOper.allowSceneActivation = false; yield return AsyOper; } void Update () { progressValue = AsyOper.progress; if(AsyOper.progress>=0.9f) { //AsyOper.progress的值最大为0.9 progressValue = 1.0f; } if (progressValue != loadingSlider.value) { //插值计算 loadingSlider.value = Mathf.Lerp(loadingSlider.value, progressValue, loadingSpeed * Time.deltaTime); if(Mathf.Abs(loadingSlider.value- progressValue)<0.01f) { loadingSlider.value = progressValue; } } loadingText.text = ((int)(loadingSlider.value * 100)).ToString() + "%"; if(loadingSlider.value==1.0f) { //允许异步加载完毕后自动切换场景 AsyOper.allowSceneActivation = true; } } }
注意:使用AsyncOperation.allowSceneActivation属性来对异步加载的场景进行控制
为true时,异步加载完毕后将自动切换到C场景