今天在处理threejs加载的Obj模型的时候,想让按照模型的不同类型一次加载到页面中,
根据模型中的children中的name来判断模型的类型
//consle.log(this.modelObject.children.length) //86
this.modelObject.traverse(child => {
console.log("in")
scene.add(child);
})
以上代码 如果 不加scene.add(child) 控制台上打印出来的“in”的数量是正确的,一旦加上 scene.add(child) 这句话 控制台上打印出来的"in"数量就不正确
经过了解发现 scene.add() 方法 不会复制一份child到scene中,原有的child是属于this.modelObject的 如果直接将child添加到场景中 就会造成层级关系(父子关系)混乱
因此需要单独创建一份数据出来 添加到场景中 这样就能将模型中的数据依次加载到场景中
this.modelObject.traverse(child => {
console.log("in")
scene.add(child.clone());
})
或者
scene.add(...this.modelObject.children)
\