1. 程式人生 > >UGUI提高 非同步載入場景進度條

UGUI提高 非同步載入場景進度條

原創

直接上程式碼,需要注意幾個API就可以了。

using UnityEngine.SceneManagement;   //使用場景管理空間

AsyncOperation prog   =  SceneManager.LoadSceneAsync("場景");     //新的非同步載入場景API,返回非同步引數

AsyncOperation.progress   // 獲取進度(我測試了一下最大是0.9,可能要真正跳到場景才是1)

AsyncOperation.allowSceneActivation // //如果載入完成,是否立刻進入場景

程式碼:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class Load : MonoBehaviour {

    public Slider progressUI;
    public Text  progressValue;
    private AsyncOperation prog;


    void Start() {
        prog = SceneManager.LoadSceneAsync("場景名");  //非同步載入場景
        
        StartCoroutine(LoadingScene());                 
    }
    
    //設定滑動條
    private void setProgressValue(int value) {
        progressUI.value = value;
        progressValue.text = value + "%";
    }


    private IEnumerator LoadingScene() 
    {
        prog.allowSceneActivation = false;  //如果載入完成,也不進入場景

        int toProgress = 0;         
        int showProgress = 0;

        //測試了一下,進度最大就是0.9
        while (prog.progress < 0.9f) 
        {
            toProgress = (int)(prog.progress * 100);
while ( showProgress<toProgress) { showProgress++; setProgressValue(showProgress); yield return new WaitForEndOfFrame(); //等待一幀 } } //計算0.9---1 其實0.9就是載入好了,我估計真正進入到場景是1 toProgress = 100; while (showProgress < toProgress ) { showProgress++; setProgressValue(showProgress); yield return new WaitForEndOfFrame(); //等待一幀 } prog.allowSceneActivation = true; //如果載入完成,可以進入場景 } }

參考了一下別的地方的文章,但是實在不知道哪個是出處,另外,這個載入速度太快了,我的電腦,我搞了很複雜的場景也是一下就過去了。