父节点active为false时,父节点销毁了,子节点onDestroy方法未被调用

之前具体creator版本号我忘记了,但是之前没有这个问题,我们游戏已经上线好几个版本了

为什么onload被调用,而ondestroy就不被调用?不应该都要被调用吗?

你用的我测试的 demo 跑的?都没调用啊。
发下你的测试 demo 看看?

假如在onload里面初始化了一些数据,将释放资源的代码写在了ondestroy里面,中途把节点隐藏了,销毁节点,岂不是数据得不到释放而泄漏了?

难道不该都被调用么

我震惊了,原来不会调用的吗,如果不看源码的话,这文档有点害人啊image

简单测试,2.4.3会调用

如果这个问题一直就存在,代码早就报错了,但我是更新到最新版本的creator才发现这个问题

这个本就是不调用啊,因为那个子节点都是未激活状态,它的脚本代码也就是不会自动执行代码了啊

不管是先隐藏在销毁父节点 还是直接销毁父节点 都会向上冒泡调用onDestroy

1赞

本应这样,但新版本,或者说不知从哪个版本开始,就不是这样了,不知道是故意为之还是BUG

我使用3.4.0 是正常的

我记得之前是有调用的,希望官方能给个答复

测试 demo 方便发下看看?

DestroyTest.zip (18.4 KB)
刚才做了一个例子测试一下

如果实例化prefab但没有将它放于场景中,prefab的active设置为false,prefab子节点的onLoad和onDestroy都不会被调用,

如果实例化prefab并将它放于场景中,prefab的active设置为false,prefab子节点的onLoad和onDestroy都会被调用

关键看prefab实例化后是否放于场景内。

cocos creator版本: 3.5.2

嗯,在添加进节点树时,节点如果是激活情况下是会触发,没激活是不会触发,这个目前是这样的。

这个情况测试目前还没复现,不知道漏测了什么情况,你们那边稳定复现?

若添加进节点树前active为false就不会触发,如果添加节点树前active为true,即使加入节点树后设置active为false,onLoad和onDestroy都会触发

刚才看了一下逻辑代码,之前是手动调用了onload :rofl:

这是生命周期方法,跟节点状态没关系吧,只要调用过onLoad方法,就应该走完整个生命周期,而不是走到一半不走了

所以这是正常的,不是 bug