1.add源码方法

add( object ) {

if ( arguments.length > 1 ) {

for ( let i = 0; i < arguments.length; i ++ ) {
// 递归调用
this.add( arguments[ i ] );

}

return this;

}

if ( object === this ) {
// 不能自己add自己
console.error( 'THREE.Object3D.add: object can\'t be added as a child of itself.', object );
return this;

}
// tips: 注意此处的判断, 必须isObject3D为真的才能被add
// 像mesh、Line等对象都是可以被add的,因为Mesh、Lien等都是继承自Object3D
// 例如源码中: class Line extends Object3D 、class Mesh extends Object3D
if ( object && object.isObject3D ) {

// 如果当前被add的那个object有parent, 就需要从当前自己的parent中给移出掉
if ( object.parent !== null ) {

object.parent.remove( object );

}
// 重新设置当前被add的object的parent
object.parent = this;
// 重新添加到新的parent的chilren中去
this.children.push( object );
object.dispatchEvent( _addedEvent );

} else {

console.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );

}

return this;

}

2.官方中文文档解释

#yyds干货盘点#源码解读-three.js中Object3D之add方法_add方法

3.核心代码说明

#yyds干货盘点#源码解读-three.js中Object3D之add方法_three.js_02