实现方式
常见的进度条实现方式分为两种,
一:当需要加载资源非常少的时候,我们可以使用同步加载的方式,当同步加载完场景之后,播放一个进度条的动画,当然这种"假"的进度条现实的并非是实际场景的加载进度,只是一个加载的动画效果,但为什么还要使用这种不是进度条的方式呢?如果播放实时加载进度,资源很小的话瞬间就完成了,也就看不到什么进度条效果了,这对用户体验是十分差的。
二:第二种进度条实现方式是异步加载场景,进度条实时显示加载进度,这种方式比较常用,适用于大型场景的加载。
上代码,首先是第二种加载方式。
1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using UnityEngine; 5 using UnityEngine.UI; 6 using UnityEngine.SceneManagement; 7 public class LoadGame : MonoBehaviour { 8 9 public Slider processView; 10 11 // Use this for initialization 12 void Start () { 13 LoadGameMethod(); 14 15 } 16 17 // Update is called once per frame 18 void Update () { 19 20 21 } 22 public void LoadGameMethod() 23 { 24 StartCoroutine(StartLoading_4(2)); 25 } 26 27 private IEnumerator StartLoading_4(int scene) 28 { 29 int displayProgress = 0; //当前显示进度 30 int toProgress = 0; //想要加载的进度 31 AsyncOperation op = SceneManager.LoadSceneAsync(scene); //异步加载 32 op.allowSceneActivation = false; //加载完成不显示 33 while (op.progress < 0.9f) //当加载进度小于数值时循环增加 34 { 35 toProgress = (int)op.progress * 100; 36 while (displayProgress < toProgress) 37 { 38 ++displayProgress; 39 SetLoadingPercentage(displayProgress); 40 yield return new WaitForEndOfFrame(); 41 } 42 } 43 44 toProgress = 100; 45 while (displayProgress < toProgress) 46 { 47 ++displayProgress; 48 SetLoadingPercentage(displayProgress); 49 yield return new WaitForEndOfFrame(); //等待所有UI渲染及摄像机完成继续执行 50 } 51 op.allowSceneActivation = true; //显示新场景 52 } 53 54 private void SetLoadingPercentage(float v) 55 { 56 processView.value = v / 100; //进度条显示 57 } 58 59 60 }