Unity场景异步加载与加载进度条

xiaoxiao2025-06-24  15

异步加载场景分为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场景

转载请注明原文地址: https://www.6miu.com/read-5032431.html

最新回复(0)