C# 使用AsyncOperation.progress加载场景从01f跳到0.9f
使用Unity 2018.1 在场景之间切换时,我会显示一个带有滑块的画布,作为进度的加载条。但滑块仅显示.01f和.09f,并在加载场景之前保持.09一段时间 为什么滑块没有显示正确的加载进度。代码有什么问题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
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如何处理它的代码,但我知道,场景中引用的任何东西,包括文件。谢谢,我现在明白了