从其他场景加载时协程未启动

时间:2019-06-11 14:40:57

标签: c# unity3d

我有一个字符选择屏幕,该屏幕显示确认屏幕,选择屏幕时,启动协程,一连串粒子飞入屏幕并加载新的关卡-这是为了延迟关卡的加载,以便粒子可以填满屏幕。

当我通过直接将场景(字符选择)加载到Unity编辑器中进行测试时,所有这些都按预期工作,但是,如果我正在执行完整的测试并且来自(开始屏幕),则可以执行所有操作,并且debug表示正在注册所有内容,但是粒子不显示,并且加载不执行。

此外,控制台不会显示任何错误。

我已经尝试了所有方法(停止使用协程,使用while(true) ...),但无法弄清楚为什么它不加载。下面的代码:

UI按钮具有LoadEloise()作为单击时触发的方法。

以下代码:

试图在激活协程之前立即将其停止运行,并且还要在启动时停止该协程,并确保在再次激活之前将粒子系统设置为Active(false)。

IEnumerator DelayLoad() 
{
     heartExplosion[explosionNumber].gameObject.SetActive(true);
     yield return new WaitForSeconds(1);
     SceneManager.LoadScene(sceneName);
}

public void LoadEloise() 
{
     sceneName = "Eloise"; 
     explosionNumber = 10; 

     StartCoroutine(DelayLoad());
}

预期结果:激活粒子系统,覆盖屏幕,然后在加载一秒钟的新场景之后。

这是一个展示预期结果的视频,方法是从托管协程的场景开始进行测试:https://www.youtube.com/watch?v=BQAgzJ-HJB4&feature=youtu.be

实际结果:没有,没有错误,没有粒子也没有。从图形的角度来看,该按钮显示为按下状态,但是什么也没有发生。

这是一个视频,显示了从上一场景启动代码时发生的情况:https://www.youtube.com/watch?v=WhEzi9Qjvg8&feature=youtu.be

1 个答案:

答案 0 :(得分:0)

您的LoadEloise函数是否被调用了?

如果只是不显示粒子的问题,则可能是由于未为粒子系统/容器正确设置画布排序顺序而导致的,但是如果随后的场景加载也没有发生,您需要先检查两件事:

  1. 添加断点/调试语句以遵循代码执行的顺序,并确保按正确的顺序调用正确的函数。
  2. 如果所有函数都被调用并且您没有看到与场景加载有关的任何错误,则可能与从外部加载场景时如何设置场景有关。在初始化函数中为新场景添加断点/调试调用,以确保新场景已被加载并就位,并确保在场景加载时内容的位置/比例未设置为某些怪异值,并检查层次结构在编辑器窗口中找到场景内容,以确保正确设置了视觉元素。