想新建一个节点使用别的节点的组件,有什么办法可以复制别的节点的组件给新建的节点吗.
图片仅代表自己想达到的目的…
cc.instantiate克隆指定的任意类型的对象,或者从 Prefab 实例化出新节点
let component = cc.instantiate(node.getComponent(cc.Sprite));
node.addComponent(component)//这样是不行的…
怎么把component 添加给指定节点呢…
let comp = a.getComponent(sprite);
b.addComponent(comp);
这个不就是我图片第三行代码吗,不可以诶.

所以不能
但是又不知道有什么方法可以直接拷贝组件
现在只有a.getComponent(cc.Sprite).spriteFrame = b.getComponent(cc.Sprite).spriteFrame;
但是如果不是Sprite组件,是别的类型的组件这样赋值感觉会很麻烦,Sprite组件只是我举的例子,我实际上运用是用cc.SkeletonAnimation还有cc.SkinnedMeshRenderer这两个组件,一条一条赋值的话就太麻烦了…
有这种比较复杂的你应该直接复制节点吧
如果拷贝节点或预制体,节点上会有很多完全用不到的脚本或组件,所以只想拷贝组件,实际想实现功能其实就和编辑器里面的copy一样的就行,但是我没找到方法.
我明白你的意思,可不可以复制完节点再把其他不用的组件全部删掉?
都能通过 getComponent 拿到组件了,还不知道 addComponent 传什么参数?同一个组件对象不能共用,只能自己重新添加
你没懂楼主的意思,楼主的意思是包括复制组件的所有属性,不用自己重新赋值,而且… 你的代码完全是画蛇添足

尴尬了,立马删,
大佬,如果是复制组件所有的属性,你看有方法实现吗?
这个实际上就是克隆一个类的对象吧
这个是复制当前节点(不包含子节点)
你不想copy其他组件的话__values__里面找找,删除掉其他的应该可以。
曲线救国应该能实现?
/**
* 只复制当前节点和组件(不复制子节点)
* @param from 需要复制的节点
*/
static cloneNode(from: Node | UIObj) {
let node = this.getNode(from)
let d: any = node
let pre = d.constructor.__values__
let arr: string[] = _.copy(d.constructor.__values__)
arr.splice(3, 1)
d.constructor.__values__ = arr
let clone = cc.instantiate(node)
d.constructor.__values__ = pre
return clone
}
直接组件对象实例加到节点的 _components 数组里就好了:
component.node = this;
this._components.push(component);
if ((CC_EDITOR || CC_TEST) && cc.engine && (this._id in cc.engine.attachedObjsForEditor)) {
cc.engine.attachedObjsForEditor[component._id] = component;
}
if (this._activeInHierarchy) {
cc.director._nodeActivator.activateComp(component);
}
请确保正确地克隆源组件…
两个节点用同一个组件不会出现问题吗?
而且组件的node对象已经变更,如果组件内部使用到了node也是一个问题,一个组件不可能被两个节点拥有。最多只能转移
为什么会出现这样的需求。。手动在component里写一个copy方法不就解决了。