我有一组对象(实际上是弧上的3D文本),我希望通过一次特定的单击将其从场景中删除。 .remove是否不适用于组?这基本上就是我拥有的:
$(".inscript").on("mousedown", function(event){
var x = scene.getObjectByName("inscriptArc");
scene.remove(x);
});
这个answer似乎建议您(使用.remove从场景中删除组),但是它对我不起作用。
答案 0 :(得分:0)
是的,您绝对可以删除一组对象。您可能已经命名了该对象的子对象,而不是实际的组。函数getObjectByName并不总是像在更老的three.js版本中所承诺的那样工作,因此可以尝试一下。
scene.children.forEach(child => child.name == "inscriptArc" ? scene.remove(child) : null)
答案 1 :(得分:0)
THREE.Scene.getObjectByName返回具有该名称的子项的第一个实例。如果您有多个,则一次调用就不会抓住它们。
要删除所有实例,我将使用THREE.Object.traverse(fn(child){})函数,即:
var children_to_remove = [];
scene.traverse(function(child){
if(child.name == "inscriptArc"){
children_to_remove.push(child);
}
});
children_to_remove.forEach(function(child){
scene.remove(child);
});
您也许可以做到
scene.traverse(function(child){
if(child.name == "inscriptArc"){
scene.remove(child);
}
});
但是我认为在某些情况下,如果您异步地从场景中加载/删除任何东西,这可能会导致错误-因为删除一个孩子可能会在遍历该孩子的孩子时引发错误。不确定,因此如果会导致问题,我会尝试简单的方法并与更复杂的方法进行交换。