项目之初,选用UGUI要做异步加载功能的loading界面。
当时UGUI相关的资源很少,多数都为NGUI的文章。
如果刚开始做异步加载,自己写的话会遇到bug,就是到了进度会卡在90%。当时有到外国的网站找解决方案,大多数都是到了90%后,继续人为加载。
不过后来有搜到下面这位大神的文章
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ButtonMessage : MonoBehaviour {
public Slider progress;
public Text progressValue;
void Start() {
progress.enabled = false;
progress.gameObject.SetActive(false);
}
public void OnStartClick2() {
Application.LoadLevel(1);
}
public void OnStartClick() {
progress.gameObject.SetActive(true);
StartCoroutine(LoadingScene(1));
}
private void setProgressValue(int value) {
progress.value = value;
progressValue.text = value + “%“;
}
private IEnumerator LoadingScene(int scene) {
int displayProgress = 0;
int toProgress = 0;
AsyncOperation op = Application.LoadLevelAsync(scene);
op.allowSceneActivation = false;
while(op.progress < 0.9f) {
toProgress = (int)op.progress * 100;
while(displayProgress < toProgress) {
++displayProgress;
setProgressValue(displayProgress);
yield return new WaitForEndOfFrame();
}
}
toProgress = 100;
while(displayProgress < toProgress){
++displayProgress;
setProgressValue(displayProgress);
yield return new WaitForEndOfFrame();
}
op.allowSceneActivation = true;
}
}
①在toProgress = (int)(op.progress * 100);要加一个括号,被这边坑了很久,否则会一直卡住
②AsyncOperation op要在协程意外定义,否则打包到安卓上会卡住
修改后的代码:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ButtonMessage : MonoBehaviour {
public Slider progress;
public Text progressValue;
private AsyncOperation op;
void Start() {
op = Application.LoadLevelAsync("要跳转的关卡");
StartCoroutine(LoadingScene());
}
private void setProgressValue(int value) {
progress.value = value;
progressValue.text = value + “%“;
}
private IEnumerator LoadingScene() {
int displayProgress = 0;
int toProgress = 0;
op.allowSceneActivation = false;
while(op.progress < 0.9f) {
toProgress = (int)op.progress * 100;
while(displayProgress < toProgress) {
++displayProgress;
setProgressValue(displayProgress);
yield return new WaitForEndOfFrame();
}
}
toProgress = 100;
while(displayProgress < toProgress){
++displayProgress;
setProgressValue(displayProgress);
yield return new WaitForEndOfFrame();
}
op.allowSceneActivation = true;
}
}
关于UGUI加载场景进度条暂时就到这了,如果有什么不对或者遗漏的地方请指正!谢谢