如何在单击时从Three.js场景中删除组?
我有一组对象(实际上是圆弧上的3D文本),我希望在特定的单击时从场景中删除这些对象。是否删除。是否不在组上工作?以下是我的基本情况:如何在单击时从Three.js场景中删除组?,three.js,Three.js,我有一组对象(实际上是圆弧上的3D文本),我希望在特定的单击时从场景中删除这些对象。是否删除。是否不在组上工作?以下是我的基本情况: $(".inscript").on("mousedown", function(event){ var x = scene.getObjectByName("inscriptArc"); scene.remove(x); }); 这似乎表明您可以(使用.remove从场景中删除组),但它对我不起作用 是的,您绝对可以删除一组对象。您可能命名了对象
$(".inscript").on("mousedown", function(event){
var x = scene.getObjectByName("inscriptArc");
scene.remove(x);
});
这似乎表明您可以(使用.remove从场景中删除组),但它对我不起作用 是的,您绝对可以删除一组对象。您可能命名了对象的子对象,而不是实际的组。函数getObjectByName并不总是像旧的three.js版本中承诺的那样工作,所以不妨试试这个
scene.children.forEach(child => child.name == "inscriptArc" ? scene.remove(child) : null)
THREE.Scene.getObjectByName返回具有该名称的子对象的第一个实例。如果你有倍数,你不会通过调用一次来捕捉它们 要删除所有实例,我将使用THREE.Object.traverse(fn(child){})函数ie:
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);
}
});
但我认为,在某些情况下,如果异步加载/删除场景中的任何内容,这可能会导致错误,因为删除子对象可能会在遍历该子对象的子对象时引发错误。不确定,所以我会尝试简单的一个,如果它引起问题,我会用更复杂的一个替换