C# 使用AsyncOperation.progress加载场景从01f跳到0.9f

C# 使用AsyncOperation.progress加载场景从01f跳到0.9f,c#,unity3d,C#,Unity3d,使用Unity 2018.1 在场景之间切换时,我会显示一个带有滑块的画布,作为进度的加载条。但滑块仅显示.01f和.09f,并在加载场景之前保持.09一段时间 为什么滑块没有显示正确的加载进度。代码有什么问题 public GameObject logoScreen; public GameObject loadingScreen; public Slider loadingSlider; void Update () { // Logo Scene is Active if

使用Unity 2018.1

在场景之间切换时,我会显示一个带有滑块的画布,作为进度的加载条。但滑块仅显示.01f和.09f,并在加载场景之前保持.09一段时间

为什么滑块没有显示正确的加载进度。代码有什么问题

public GameObject logoScreen;
public GameObject loadingScreen;
public Slider loadingSlider;

void Update ()
{
    // Logo Scene is Active
    if (logoScreen.activeInHierarchy == true)
    {
        //  Debug.Log("Logo Active");
        if (Input.GetMouseButtonDown(0))
        {
            logoScreen.SetActive(false);
            LoadScene(1);
        }
    }
}

AsyncOperation async;

public void LoadScene(int sceneNUM)
{
    StartCoroutine(LoadingScreen(sceneNUM));
}

IEnumerator LoadingScreen(int sceneNum)
{
    loadingScreen.SetActive(true);
    async = SceneManager.LoadSceneAsync(sceneNum);
    async.allowSceneActivation = false;

    while (async.isDone == false)
    {
        loadingSlider.value = async.progress / 0.9f;
        if (async.progress == 0.9f)
        {
            loadingSlider.value = 1f;
            async.allowSceneActivation = true;
        }
        yield return null;
    }
}

你的代码没有问题。您的场景正在快速加载。这是因为您没有引用很多资源,所以Unity将从
0
加载到
9
。资源文件较少的场景将快速加载,您甚至可能看不到加载时间。记住,我不是说项目,我是说现场。如果资源文件放置在项目中,但未在场景中引用,则在加载该场景时将不会加载该资源文件,这样可以节省加载时间


要验证这是否是问题所在,请创建一个空场景(场景3)。将
AudioSource
VideoPlayer
RawImage
等组件附加到游戏对象,然后将音频、视频和图像分配给它们。保存它,然后更改代码以加载此场景3。现在加载和
异步操作应该需要更多的时间。progress
将显示
0
0.9
之间的值。引用的资源越多,在
0
0.9
之间看到的值就越多。加载场景所需的时间越长

您希望滑块显示什么?加载的确切进度。它在开始时仅显示0.1f的值,仅显示0.9f,而不是从0.2-0.8F的连续流量谢谢!你说它通过进程运行所有被引用的东西,甚至是被停用的游戏对象,对吗?对不起。你能把最后一个问题再说一遍吗?只是想更深入地了解作为进步的是什么。你说了现场提到的任何事情。我有几个游戏对象在层次结构中被取消激活,这包括在所有的游戏中?即使它被停用,它仍然被包括,因为你必须在某个时候激活这个游戏对象。不包括他们是没有意义的。请注意,一个简单的游戏对象不会使游戏变得沉重。让它沉重的是一个引用了资源文件的游戏对象。我不知道Unity如何处理它的代码,但我知道,场景中引用的任何东西,包括文件。谢谢,我现在明白了