重新加载Unity Scene不起作用

时间:2018-07-30 19:09:07

标签: c# unity3d

我正在使用此代码在场景加载开始时淡入CanvasGroup,然后,如果玩家输了,我想淡出场景并从头开始重新加载。

void Update () {
    if (Time.time < 1 && fade.alpha >= 0)
        fade.alpha = .99f - Time.time;
    if (fadeOut)
        fade.alpha += .02f;
    if (fade.alpha >= 1)
    {
        Debug.Log("Change scene");
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
}

问题是,当点击此按钮时,它将在层次结构中两次显示游戏场景,而在屏幕上都没有显示。我将在下面上传图片。当它这样做时,也会多次击中Debug.Log。 enter image description here
如果这是项目中唯一的场景,这不起作用吗?我唯一能想到的。

我已经更新了该方法以包含一个布尔值,以确保它应该只运行一次。不知何故,它仍然运行了无数次,直到我结束了统一编辑器。新的更新方法是这样:

void Update () {
    if (Time.time < 1 && fade.alpha >= 0)
        fade.alpha = .99f - Time.time;
    if (fadeOut)
        fade.alpha += .02f;
    if (fade.alpha >= 1 && !reloadStarted)
    {
        Debug.Log("Change scene");
        reloadStarted = true;
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);

    }
}

2 个答案:

答案 0 :(得分:1)

我猜想Update的执行速度比重新加载场景的速度快。因此,它开始在每次更新时重新加载。引入bool属性以指示重新加载已经开始。

if (fade.alpha >= 1 && !isReloadStarted)
{
    Debug.Log("Change scene");
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    isReloadStarted = true;
}

此外,根据您的描述,您可能想在fade.alpha 小于或等于0 时重新加载。

fade.alpha <= 0

答案 1 :(得分:0)

我最终重构了代码,并以完全不同的方式实现了这一点。我仍然不知道为什么它这么奇怪。