unity 遊戲滑動條載入非同步場景顯示
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
/// <summary>
/// 指令碼位置:Main Camera
/// 指令碼功能:場景非同步載入的進度條顯示
/// </summary>
public class LoadingScene : MonoBehaviour
{
// 滑動條
public Slider processBar;
// Application.LoadLevelAsync()這個方法的返回值型別是AsyncOperation
private AsyncOperation async;
// 當前進度,控制滑動條的百分比
private uint nowprocess = 0;
[SerializeField]
Text text_;//顯示百分比
void Start()
{
// 開啟一個協程
StartCoroutine(loadScene());
}
// 定義一個協程
IEnumerator loadScene()
{
// 非同步讀取場景
// 指定需要載入的場景名
//async = Application.LoadLevelAsync("需要載入的場景名字或者index");
async= SceneManager.LoadSceneAsync("Uguiframwork");
// 設定載入完成後不能自動跳轉場景
async.allowSceneActivation = false;
// 下載完成後返回async
yield return async;
}
void Update()
{
// 判斷是否載入完需要跳轉的場景資料
if (async == null)
{
// 如果沒載入完,就跳出update方法,不繼續執行return下面的程式碼
return;
}
// 進度條需要到達的進度值
uint toProcess;
Debug.Log(async.progress * 100);
// async.progress 你正在讀取的場景的進度值 0---0.9
// 如果當前的進度小於0.9,說明它還沒有載入完成,就說明進度條還需要移動
// 如果,場景的資料載入完畢,async.progress 的值就會等於0.9
if (async.progress < 0.9f)
{
// 進度值
toProcess = (uint)(async.progress * 100);
}
// 如果能執行到這個else,說明已經載入完畢
else
{
// 手動設定進度值為100
toProcess = 100;
}
// 如果滑動條的當前進度,小於,當前載入場景的方法返回的進度
if (nowprocess < toProcess)
{
// 當前滑動條的進度加一
nowprocess++;
}
// 設定滑動條的value
processBar.value = nowprocess / 100f;
text_ .text= nowprocess.ToString() + "%";
// 如果滑動條的值等於100,說明載入完畢
if (nowprocess == 100)
{
// 設定為true的時候,如果場景資料載入完畢,就可以自動跳轉場景
async.allowSceneActivation = true;
}
}
}