协程在等待 3 秒后不会加载新场景



我得到了这个脚本。这个想法是在完成游戏后触发LoadNextScene()。这将加载一个名为"做得好"的场景。此场景应打开约三秒钟,然后加载名为"开始菜单"的场景。

这工作了一半。游戏完成后,将加载"做得好"场景,但未加载"开始菜单",并且不会打印MyCoroutine()中的调试消息。

可能出了什么问题?

我还在考虑我是否应该停止我的协程,就像我在代码中所做的那样好练习吗?

这是我的代码:

public void LoadNextScene()
{   
Debug.Log("NEXT SCENE WAIT 3 sec");
SceneManager.LoadScene("Well done");
Debug.Log("Start waiting");
StartCoroutine(MyCoroutine());
StopCoroutine(MyCoroutine());
}
private IEnumerator MyCoroutine()
{
yield return new WaitForSeconds(3);
Debug.Log("Finish waiting and load start menu");
SceneManager.LoadScene("Start Menu");
}

在您第一次SceneManager.Load之后,此脚本实例所属的当前场景被卸载→此游戏对象被销毁→ 没有人再运行您的协程了。

出于某种原因,您在启动它后立即额外使用了StopCoroutine,因此它无论如何都不会运行 → 不,这没有任何意义;)


或者,您可以在Well Done场景中使用单独的专用脚本,该脚本会在 3 秒后自动返回主菜单。

实际上,为了使它更加灵活和可重用,您可以有一个类似

public class SwitchSceneDelayed : MonoBehaviour
{
// Configure these in the Inspector
[SerializeField] bool autoSwitch = true;
[SerializeField] float _delay = 3f;
[SerializeField] string targetScene = "Start menu";
private void Start()
{
if(autoSwitch) StartCoroutine(SwitchDelayedRoutine(_delay));
}
public void SwitchDelayed()
{
StartCoroutine(SwitchDelayedRoutine(targetScene, _delay));
}
public void SwitchDelayed(float delay)
{
StartCoroutine(SwitchDelayedRoutine(targetScene, delay));
}
public void SwitchDelayed(string scene)
{
StartCoroutine(SwitchDelayedRoutine(scene, _delay));
}
public void SwitchDelayed(string scene, float delay)
{
StartCoroutine(SwitchDelayedRoutine(scene, delay));
}
private IEnumerator SwitchDelayedRoutine(string scene, float delay)
{
Debug.Log($"Started waiting for {delay} seconds ...");
yield return new WaitForSeconds (delay);
SceneManager.LoadScene(scene);
}
}

因此,此脚本允许您在delay秒后切换到targetScene中配置的另一个场景。如果启用autoSwitch例程将立即启动,否则您可以随时通过调用SwitchDelayed触发它。

把它放在你的Well Done场景中,然后只做

public void LoadNextScene()
{   
SceneManager.LoadScene("Well done");
}

在您的原始脚本中。

最新更新