我使用函数Application.LoadLevelAsync(s);在我的游戏中它只停留在89%。帮我。这是我的代码:
public void LoadScenes (string s)
{
if (!quit) {
SoundController.PlaySound (soundGame.ButtomClick);
progressBars.gameObject.SetActive (true);
background.SetActive (true);
text.gameObject.SetActive (true);
async = Application.LoadLevelAsync (s);
async.allowSceneActivation = false;
StartCoroutine (DisplayLoadingScreen ());
}
}
IEnumerator DisplayLoadingScreen ()
{
while (!async.isDone) {
loadProgress = (int)(async.progress * 100);
text.text = "Loading Progress " + loadProgress + "%";
progressBars.size = loadProgress;
yield return null;
}
if (async.isDone) {
Debug.Log ("Loading complete");
async.allowSceneActivation = true;
}
}
答案 0 :(得分:0)
根据我的经验,AsyncOperation.progress
可以在你发现的时候达到89%左右。它可能看起来像是停留在那条消息上,当它确实在它需要的时间内仍在加载时。即使它已经完成,它也不会达到100%,所以如果你想要实现一个加载条,它就没用了。
因此,async.isDone
可能永远不会成为true
。
作为一种解决方法,您可以尽早设置async.allowSceneActivation = true;
,完全忽略async.progress
:
async = Application.LoadLevelAsync (s);
async.allowSceneActivation = true;
由于这个问题,我倾向于使用与进度无关的旋转加载图标而不是加载栏。
另一方面,我没有经过测试,others have said这是一个仅限编辑的问题; async.progress
和async.isDone
实际上可能适用于独立版本。
答案 1 :(得分:0)
设置async.allowSceneActivation = false
时,加载会停止在90%或0.9。这是因为合一会节省最后的10%,以实际显示已加载的场景。因此,在实际加载过程发生时是0到0.9,最后一个.1%用于显示加载的场景。
因此,在您的情况下,您正在检查async.isDone
,这仅在进度为100%时才成立,但您还设置了async.allowSceneActivation = false
,它将在90%时停止进度。您可能要检查的是async.progress >=0.9f
,然后设置您的async.allowSceneActivation = true
。
参考:https://docs.unity3d.com/ScriptReference/AsyncOperation-progress.html