1. 程式人生 > >非同步載入和同步載入Unity載入過度畫面

非同步載入和同步載入Unity載入過度畫面

獸人永不為奴!!!聯盟狗們,拔劍吧!!!
這裡寫圖片描述

那個啥,言歸正傳。

首先看一下Unity的兩個載入函式

同步載入
:載入完畢新場景才會繼續執行別的事
這裡寫圖片描述
這裡寫圖片描述

非同步載入
:在後臺載入新的場景,在此過程中還可以執行其他的事情
這裡寫圖片描述
這裡寫圖片描述

值得注意的是:非同步載入雖然在後臺載入,但是,因為程式對記憶體進行大量的操作,所以依然會有一定的卡頓(例如:我叫MT2進入畫面)

同步載入比較簡單
呼叫函式即可

Application.LoadLevel("SceneName");
Application.LoadLevel("SceneIndex");

非同步載入相對比較麻煩
首先,利用NGUI建立一個UISlider元件,將其前景預製件UISlider和顯示載入百分比的UILabel
其次,新增如下程式碼:

using UnityEngine;
using System.Collections;

public class LoadingScene : MonoBehaviour {

    //靜態字串儲存要載入的場景名字
    public static string LoadingName;
    //靜態int型別儲存要載入的場景索引
    public static int LoadIndex;

    //引用UI元件
    public UISlider slider;
    public UILabel lable;

    //宣告一個非同步進度變數
    AsyncOperation asyn;



    // Use this for initialization
void Start () { if (slider == null || lable == null) { Debug.Log("Error"); } else { Debug.Log("Successful"); } //進入這個場景就立即協程載入新場景 StartCoroutine("BeginLoading"); } // Update is called once per frame
void Update () { //更新UI slider.value = asyn.progress; //載入進度 lable.text = (slider.value * 100).ToString(".00"); } //載入目標場景的函式 IEnumerator BeginLoading() { if (LoadingName == null) { asyn = Application.LoadLevelAsync(LoadIndex); } else { asyn = Application.LoadLevelAsync(LoadingName); } yield return asyn; } //設計一個封裝好的靜態函式,為了和Unity一致 //設計以場景名稱和場景索引的靜態函式 /// <summary> /// 非同步載入函式 /// </summary> /// <param name="value">場景名稱</param> public static void LoadNewScene(string value) { LoadingName = value; Application.LoadLevel(LoadingName); } /// <summary> /// 非同步載入函式 /// </summary> /// <param name="value">場景索引</param> public static void LoadNewScene(int value) { LoadIndex = value; Application.LoadLevel(LoadIndex); } }

歡迎關注我的微信個人訂閱號
這裡寫圖片描述
每天多學一點0.0