您的位置:首页 > 移动开发 > Unity3D

Unity3d_UGUI加载场景进度条

2015-06-03 20:41 465 查看
项目之初,选用UGUI要做异步加载功能的loading界面。

当时UGUI相关的资源很少,多数都为NGUI的文章。

如果刚开始做异步加载,自己写的话会遇到bug,就是到了进度会卡在90%。当时有到外国的网站找解决方案,大多数都是到了90%后,继续人为加载。

不过后来有搜到下面这位大神的文章

原文:http://ez-dev.cn/?p=30

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;
}
}


该脚本存在bug:
①在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加载场景进度条暂时就到这了,如果有什么不对或者遗漏的地方请指正!谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: