Unity3D非同步載入的進度條製作
阿新 • • 發佈:2019-01-14
Unity3D非同步載入場景的場景進度條的製作
01.菜鳥一些
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; /// <summary> /// 載入遊戲滑動條-使其平滑載入到100%並跳轉到下一個場景 /// </summary> public class LoadGame : MonoBehaviour { public Slider processView; // Use this for initialization void Start () { LoadGameMethod(); } // Update is called once per frame void Update () { } public void LoadGameMethod() { StartCoroutine(StartLoading_4(2)); } private IEnumerator StartLoading_4(int scene) { int displayProgress = 0;//程序 displayProgress向toProgress靠攏 int toProgress = 0;//目標 // //非同步載入,並獲取載入進度 //LoadSceneAsync(scene) 返回一個協程(當前進度) AsyncOperation op = SceneManager.LoadSceneAsync(scene); op.allowSceneActivation = false; //若設定為false 則會載入到0.89999999暫停 while (op.progress < 0.9f) { //op.progress當前進度是一個0~1的值 toProgress = (int)op.progress * 100; while (displayProgress < toProgress) { ++displayProgress; SetLoadingPercentage(displayProgress); //WaitForEndOfFrame等待所有的相機和UI等渲染完成 //因為進度條有變動,需要進行渲染 yield return new WaitForEndOfFrame(); } } toProgress = 100; while (displayProgress < toProgress) { ++displayProgress; SetLoadingPercentage(displayProgress); yield return new WaitForEndOfFrame(); } op.allowSceneActivation = true; } private void SetLoadingPercentage(float v) { processView.value = v / 100; }
方式2.簡單一些
using UnityEngine; using System.Collections; using UnityEngine.UI; /// <summary> /// 非同步載入進度條 /// </summary> public class LoadingScene : MonoBehaviour { public Slider processBar; private AsyncOperation async; // 當前進度,控制滑動條的百分比 private uint nowprocess = 0; void Start () { // 開啟一個協程 StartCoroutine (loadScene ()); } // 定義一個協程 IEnumerator loadScene () { //非同步載入場景 async = Application.LoadLevelAsync ("場景名"); async.allowSceneActivation = false; // 下載完成後返回async yield return async; } void Update () { // 判斷是否載入完需要跳轉的場景資料 if (async == null) //沒有載入完成 { return; } // 進度條需要到達的進度值 uint toProcess; if (async.progress < 0.9f) { // 進度值 toProcess = (uint)(async.progress * 100); } else { // 載入完畢 // 進度值為100 toProcess = 100; } // 如果滑動條的當前進度,小於當前載入場景的方法返回的進度 if (nowprocess < toProcess) { // 當前滑動條的進度加一 nowprocess++; } // 設定滑動條的value processBar.value = nowprocess / 100f; //載入完畢 if (nowprocess == 100) { // 設定為true的時候,如果場景資料載入完畢,就可以自動跳轉場景 async.allowSceneActivation = true; } } }