-
Creator 版本: 3.5.2
-
重现方式:父节点active为false时,父节点销毁了,子节点onDestroy方法未被调用
-
之前哪个版本是正常的: 3.5.1
-
重现概率: 100%
之前具体creator版本号我忘记了,但是之前没有这个问题,我们游戏已经上线好几个版本了
为什么onload被调用,而ondestroy就不被调用?不应该都要被调用吗?
你用的我测试的 demo 跑的?都没调用啊。
发下你的测试 demo 看看?
假如在onload里面初始化了一些数据,将释放资源的代码写在了ondestroy里面,中途把节点隐藏了,销毁节点,岂不是数据得不到释放而泄漏了?
难道不该都被调用么
我震惊了,原来不会调用的吗,如果不看源码的话,这文档有点害人啊
简单测试,2.4.3会调用
如果这个问题一直就存在,代码早就报错了,但我是更新到最新版本的creator才发现这个问题
这个本就是不调用啊,因为那个子节点都是未激活状态,它的脚本代码也就是不会自动执行代码了啊
不管是先隐藏在销毁父节点 还是直接销毁父节点 都会向上冒泡调用onDestroy
本应这样,但新版本,或者说不知从哪个版本开始,就不是这样了,不知道是故意为之还是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 