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仍然是真的。