Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重新加载Unity场景不会';行不通_C#_Unity3d - Fatal编程技术网

C# 重新加载Unity场景不会';行不通

C# 重新加载Unity场景不会';行不通,c#,unity3d,C#,Unity3d,我正在使用此代码在场景加载开始时淡入画布组,然后如果玩家失败,我希望淡出场景并从开始重新加载 void Update () { if (Time.time < 1 && fade.alpha >= 0) fade.alpha = .99f - Time.time; if (fadeOut) fade.alpha += .02f; if (fade.alpha >= 1) { Debu

我正在使用此代码在场景加载开始时淡入画布组,然后如果玩家失败,我希望淡出场景并从开始重新加载

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);
    }
}
void更新(){
如果(Time.Time<1&&fade.alpha>=0)
fade.alpha=.99f-Time.Time;
如果(衰减)
fade.alpha+=0.02f;
如果(fade.alpha>=1)
{
Log(“更改场景”);
加载场景(SceneManager.GetActiveScene().name);
}
}
问题是,当它点击这个按钮时,它会在层次结构中显示两次游戏场景,而在屏幕上则没有。我将上传下面的图片。当它执行此操作时,也会反复点击Debug.Log
如果这是项目中唯一的场景,那么这不起作用吗?我能想到的只有一件事

我已经更新了该方法,使其包含一个布尔值,以确保它只运行一次。不知何故,它仍在运行无数次,直到我结束unity编辑器。新的更新方法如下所示:

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);

    }
}
void更新(){
如果(Time.Time<1&&fade.alpha>=0)
fade.alpha=.99f-Time.Time;
如果(衰减)
fade.alpha+=0.02f;
如果(fade.alpha>=1&&!重新加载开始)
{
Log(“更改场景”);
reloadStarted=true;
加载场景(SceneManager.GetActiveScene().name);
}
}

我猜执行
更新
比重新加载场景要快。所以每次更新都会重新加载。引入bool属性,以指示已开始重新加载

if (fade.alpha >= 1 && !isReloadStarted)
{
    Debug.Log("Change scene");
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    isReloadStarted = true;
}
此外,根据您的描述,您可能希望在
淡入淡出时重新加载。alpha
小于或等于0

fade.alpha <= 0

fade.alpha我最终重构了代码,并以一种完全不同的方式实现了它。我仍然不知道它为什么会表现得如此奇怪。

非常奇怪,即使有了bool,它仍然会多次运行Debug.Log。我甚至不知道这怎么可能。if最确定地检查alpha和false布尔值,但即使我告诉它打印布尔值,它也会在多次运行时打印true。请尝试将IsReloadStarted设置为静态布尔值。可能是脚本的每个新实例都在执行代码。静态布尔值应该可以防止这种情况的发生。这似乎解决了一个问题,并以某种方式增加了另一个问题。现在,出于某种原因,fade.alpha+=0.2f只运行一次,即使更新函数继续被调用,并且fadeOut仍然是真的。