loadScene之后节点消失

  • Creator 版本:3.7.4

  • 目标平台: 360浏览器模拟运行

  • 重现方式:必现

在2D游戏中的Canvas节点下的一个组件调用loadScene如下
director.loadScene(“scene”,(err, scene)=>{});
重新载入场景之后,我试着打印节点层级,发现canvas下的最后一个节点消失了,也没有出现任何异常提示,这个节点没有任何特别,所有节点都不是常驻节点,运行时的异常也很多,很多都是之前没有问题的,在重新载入同一个场景后出现了问题,我都找不到可以循迹的原因。
如果调用loadScene的节点必须是常驻节点的话,会提示不能放在canvas下,得是根节点才行,这样改成根节点并设置为常驻节点,调用loadScene后,打印节点层级发现该节点又跑到Canvas下面了,这没有任何道理呀。为什么引擎会自行修改节点层级呢?是不是我的思维没对?我就想要回到游戏主菜单,就像一开始加载进来那样,有没有更好的方法呢?
另外,重载场景后发现了一些静态变量没有初始化,这我可以手动调整,但没有解决上述的节点消失问题,因为该节点不涉及任何静态变量,涉及到的节点也在预期的位置。静态变量会影响场景的重新加载吗?这和节点的消失是否有联系呢?

Talk is cheap…

第1:调用场景切换方法的节点建议用常驻节点调用,防止不是常驻节点调用场景切换后导致该常驻节点发生逻辑失效,因为场景切换后,非常驻节点脚本等信息会被销毁。
第2:针对你主菜单返回不到的问题,建议将Canvas设置为常驻节点,并且在制作各个UI菜单预制体的时候放在该Canvas下制作(设置好各UI偏移等),然后拖入文件夹当作预制体,最后将场景上Canvas下的做好的节点删除,用代码去动态添加和删除你的实例化预制体节点菜单到场景上。

1赞

好像确实应该这样。之前我只是把需要大量复制生成的节点做成预制体的,原来预制体还应这样使用。