异步加载的方法很多,这里我介绍一下我前段时间学到的一个异步加载方法,感觉挺好用,有兴趣的可以看看,下面就直接贴代码:
/// <summary>
/// Async to load.
/// Created By Hong Youwei
/// 2015.3.25
/// </summary>
using UnityEngine;
using System.Collections;
public class AsyncToLoad : MonoBehaviour {
public GameObject background; // 获取游戏背景
public GameObject loadingBar; // 进度条对象
UISlider slider; // 进度条脚本
UILabel lable_Percentage; // 显示进度的百分比的标签
// Use this for initialization
void Start () {
UISprite sprite = background.GetComponent<UISprite> ();
sprite.spriteName = GameInfo.loadSceneName;
LoadScene();
}
// 调用加载界面的加载协程
public void LoadScene() {
slider = loadingBar.GetComponent<UISlider>();
lable_Percentage = loadingBar.GetComponentInChildren<UILabel>();
StartCoroutine(StartLoading(GameInfo.loadSceneName));//StartLoading后面括号填的是要加载的界面的名字,我这里填的是我自己的界面名字加载,使用的话,记得设置为你自己的界面名字比如StartCoroutine(StartLoading("Level1"));
}
// 异步加载协同程序
IEnumerator StartLoading(string name) {
int displayProgress = 0; // 进度条显示值
int toProgress = 0; // 进度条要达到的值
AsyncOperation aop = Application.LoadLevelAsync(name);
aop.allowSceneActivation = false; // 设置不允许加载完成就进入界面
// 判断是否进度小于0.9,如果是的话循环输出进度条的值
while (aop.progress < 0.9f)
{
toProgress = (int)(aop.progress * 100);
while (displayProgress < toProgress)
{
++displayProgress;
SetLoadingPercentage(displayProgress);
}
yield return new WaitForEndOfFrame();// 每次循环结束执行完当前帧才继续下一个循环
}
// Unity就只会加载场景到90%,剩下的10%要等到allowSceneActivation设置为true后才加载,所以设置增加进度条效果,让进度条平滑显示达到100%
toProgress = 100;
while (displayProgress < toProgress)
{
++displayProgress;
SetLoadingPercentage(displayProgress);
yield return new WaitForEndOfFrame();
}
yield return new WaitForSeconds(0.2f);//延缓进入游戏时间,如果场景较小加载很快,为了看到进度效果,做了个小小延迟,不需要的可以去掉
aop.allowSceneActivation = true; // 设置加载完成可以进入界面
}
// 设置加载进度条信息
void SetLoadingPercentage(int _value)
{
slider.value = _value / 100.0f;
lable_Percentage.text = _value + "%";
}
}
以上有一部分是直接调用了NGUI插件的UISprite做背景,调用UILable做一个百分比数字显示,调用UISlider作为一个进度条