我正在使用此代码在场景加载开始时淡入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。
如果这是项目中唯一的场景,这不起作用吗?我唯一能想到的。
我已经更新了该方法以包含一个布尔值,以确保它应该只运行一次。不知何故,它仍然运行了无数次,直到我结束了统一编辑器。新的更新方法是这样:
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);
}
}
答案 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)
我最终重构了代码,并以完全不同的方式实现了这一点。我仍然不知道为什么它这么奇怪。