加载场景Unity

时间:2015-11-28 03:49:16

标签: c# unity3d

我使用函数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;
    }
}

2 个答案:

答案 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.progressasync.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