destroy 实例化的节点也会将原节点的组件一起删了

我不确定是不是我的操作有问题或是我的使用姿势不对导致的这个问题。
我对一个预制体进行实例化然后添加到界面上 我们对这个节点标记Node1 。
然后对Node1 动态添加两个组件 一个是button(这个不限我测试用所以加上去的) 一个是另外一个类(testCom)
我再对这个实例化出来的节点Node1进行实例化并且再添加到界面上 我们对这个新的节点标记Node2。
这时候我对node2进行destroy 结果node1中添加的(testCom)组件丢失了
image 这是以上的代码
log出来得到的是


这时候还是正常的
但是在我添加了 移除Node2 的方法之后

log出来的结果就是testCom不见了

我的理解力 实例化是深度拷贝 移除拷贝出来的节点不用改影响到原节点才对 这边就让我很费解。是不是我的理解或者我的用法不对?以上的用发是出现在滚动容器与引导里,我克隆了滚动容器的节点,滚动容器内对节点添加了组件,这时候我移除克隆的节点就导致滚动容器内添加的类丢失了
有没有大佬指点一下?

bugDemo2.zip (863.9 KB)

这是demo

又发现了一个新的问题, 我对node2进行脚本移除, 结果log 出来 node1的没了 但是node2的还在



这指针是乱了?

你是用node1实例化的node2,node2上的组件当然和1一样的

是一样的,但是我移除node2 结果node1的丢了

demo工程传错了吧

我改过了 节点名字,本身是没错的

我重新传demo了

神仙写法,所以你为什么要把testCom放在test里面呢?你把testCom单独放一个脚本,并添加注解@ccclass就正常了。所以你为什么不添加@ccclass呢?

cocos底层cc对象和js对象拷贝逻辑不一样,具体自己查源码。逆天写法导致的bug

不加注解这里返回false,不会被标记为cc对象。

有一说一,2.x的引擎源码结构相对3.x真是一坨

多谢大哥指导 我这边试一下,单独提出来一个脚本

感谢大佬!我单独拎出来一个脚本 备注@ccclass 就正常了