1. 程式人生 > >NGUI的異步場景加載進度條

NGUI的異步場景加載進度條

unity sce easyn math debug system log pan collect

1、直接創建三個場景,其中第二個場景是用來顯示進度條加載的界面,進度條用UISlider,不會的看我前面的博文就可以了。

2、這裏提供兩種方法,建議使用第一種,加載比較平緩

方法一:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LoadingPags : MonoBehaviour
{


    public UISlider progressBar;            //
進度條的引用 private string ScenceName="C"; //加載場景的名字 private float dtimer = 0; private float target = 0; AsyncOperation op = null; private void Start() { Debug.Log("進入異步"); //op = SceneManager.LoadSceneAsync(ScenceName); //進入loadScene方法
//op.allowSceneActivation = false; progressBar.value = 0; //棄用前將其進行初始化了 StartCoroutine(ProcessLoading()); } private void Update() { dtimer += Time.deltaTime; progressBar.value = Mathf.Lerp(progressBar.value, target, dtimer * 0.2f
); //乘以的數值用來控制加載的速度,當新場景比較小的時候可以使用較小的值,有一定的效果,當場景加載較大的時候就不建議這麽使用了 if(progressBar.value>=0.99f) { progressBar.value = 1; //使其的值達到完整 op.allowSceneActivation = true; //為true 的時候才可以進行加載新的場景 } } IEnumerator ProcessLoading() { op = SceneManager.LoadSceneAsync(ScenceName); //進入loadScene方法 op.allowSceneActivation = false; while (true) //死循環,使其在場景沒有加載完成時就不退出了 { target = op.progress; if(target>=0.9f) //當場景加載了90%了 { target = 1; yield break; } yield return 0; } } }

第二種:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Loadign : MonoBehaviour {

    public UISlider uislider;
    private AsyncOperation asyn=null;

    public static string LoadingName;           //聲明一個靜態的字符串變量倆保存要加載的場景名稱
    void Start ()
    {
        if(uislider)
        {
            //進度條丟失了
        }
        StartCoroutine(Loading());
    }
    
    // Update is called once per frame
    void Update ()
    {

        uislider.value = asyn.progress;
        //Debug.Log(uislider.value);
        //if (uislider.value>=0.8)
        //{
        //    uislider.value = 1;

        //    asyn.allowSceneActivation = true;
        //}

    }
    IEnumerator Loading()
    {
        asyn = SceneManager.LoadSceneAsync(2);          //加載第三個嘗盡
        asyn.allowSceneActivation = false;
        //uislider.value = asyn.progress;         //賦值
        yield return asyn;
    }

    //封裝好的靜態函數
    public static void LoadNewScene(string value)
    {
        LoadingName = value;
        SceneManager.LoadScene("Loadign");
    }

}

NGUI的異步場景加載進度條