非同步載入和同步載入Unity載入過度畫面
阿新 • • 發佈:2019-01-28
獸人永不為奴!!!聯盟狗們,拔劍吧!!!
那個啥,言歸正傳。
首先看一下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