【发布时间】:2019-06-11 14:40:57
【问题描述】:
我有一个字符选择屏幕,显示确认屏幕并在选择时,开始了Coroutine,将粒子突发到屏幕中,加载新的级别 - 这是延迟粒子的负载可以填满屏幕。
当我通过在 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
【问题讨论】:
-
添加一些调试语句检查所有的值和发生了什么
-
欢迎来到 StackOverflow!您是否尝试设置断点以查看调用了哪一行?还有
by directly loading the scene是什么意思?从您的代码中看不到为什么这不起作用... -
持有脚本的对象是否处于活动状态?
-
谢谢大家,我确实将 Debug.Log 添加到控制台以查看正在调用哪些行。它似乎在激活粒子效果后立即停止,但从未显示。这意味着它进入了协程,但它永远不会到达 Load level 部分。
-
@Everts 对象开始处于非活动状态,但是当通过代码所在的场景到达它时,它会毫无问题地激活它。