先看一下我的成果
问题
我们通常在玩游戏的时候,会看到进度条加载,为什么要这样做那?
仔细分析一下我们就会明白,其实是主场景包含的资源较多,直接导致加载场景的时间较长,影响了玩家的体验。对于这样的情况,是很容易引起玩家反感的,为了避免这种情形的发生,添加一个加载Loading场景,然后再通过Loading场景来加载主场景,是势在必行的。因为Loading场景包含的资源较少,所以加载速度快。在加载主场景的时候一般会在Loading界面中显示一个进度条来告知玩家当前加载的进度。在Unity中可以通过调用Application.LoadLevelAsync函数来异步加载游戏场景,通过查询AsyncOperation.progress的值来得到场景加载的进度。
//单击加载按钮
public void LoadButton() {
//通过协同加载程序
StartCoroutine(StartLoading(1));
}
//定义协同
private IEnumerator StartLoading(int scene) {
//异步加载场景
AsyncOperation op = Application.LoadLevelAsync(scene);
//是否操作完成
while(!op.isDone) {
SetLoadingPercentage(op.progress * 100);
yield return new WaitForEndOfFrame();
}
}
//设置显示进度
private void SetLoadingPercentage(int DisplayProgress)
{
progressImg.fillAmount = DisplayProgress * 0.01f;
proText.text = DisplayProgress.ToString() + "%";
}
到这里是不是就已经可以实现了那,我只能说基本功能都实现,但是效果不会是理想的。
因为,上面的代码的结果是,进度条并没有连续的显示加载的进度,数字也不是连续出现的,在没有显示到100%就情况下,就直接切换场景了。为什么会是这样那?通过查找资料原因,我们可以发现,其原因在于Application.LoadLevelAsync并不是真正的后台加载,它在每一帧加载一些游戏资源,并给出一个progress值,所以在加载的时候还是会造成游戏