是新加的机制吗?

  • Creator 版本:2.1.2

  • 出现概率:100%

Cannot change hierarchy while activating or deactivating the parent.
重现操作 A节点,B节点作为A节点的子节点,A节点移除父类时,在A上的脚本中onDisable移除B节点的父类就会报以上的问题。
问题想要在A节点移除父类的时候,把B节点推回对象池,除了在onDisable中操作外,还有其他办法吗

在A节点移除父类之前把B节点推回对象池不行吗?

你指的是有类型onDisable接口,还是要自己判断再做移除

移除父类既然是你主动进行的操作,那在“移除”操作之前把B先放到对象池里不就行了

没有理解你前半句话是什么意思。每个继承自cc.component的类都有一个方法叫onDisable,这个方法会在该脚本所挂载的节点的active=false时被调用。你的需求好像只需要在你执行节点A.reamoveFromParent()或者A.parent=null;之前将节点A的子节点B放回对象池就可以了。

重写节点A的destroy试试看,先put节点B后destroy节点A,反正就是个顺序问题

我也遇到这个问题了 要是能知道A什么时候移除 我就不用在 ondis 方法里面写了

A-B-C 在A onDisable的逻辑里,会遍历A的所有孩子并标记 意味着标记了B,所以会反馈上面那个报错,但此时C属于B的孩子未被标记

所以结论是,你可以在A的onDisbale方法里面回收C,但是不能回收B

解决方法是:将你现在的B变成C,新增一个B