Three.js Raycast无法获取对象

时间:2019-10-08 07:11:55

标签: javascript three.js

当我单击3D模型时,我想要获取能够删除该对象的对象ID,名称或对象。

    function onDocumentMouseDown( event ) {
if (enableRaycasting){
event.preventDefault();
mouse.set( ( event.clientX / window.innerWidth ) * 2 - 1, - ( 
    event.clientY / window.innerHeight ) * 2 + 1 );
raycaster.setFromCamera( mouse, camera );
var intersects = raycaster.intersectObjects( scene.children, true );
console.log(intersects);    
if ( intersects.length > 0 ) {


scene.remove(intersects[0]); //doesnt work   
    scene.remove(intersects[0].object); //doesnt work
    scene.remove(intersects[1]); //doesnt work
scene.remove(intersects[1].object); //doesnt work                
    console.log(intersects[0].object.name) //Bot_Skinned_0
    console.log(intersects[0].object.id)// output: 72



}

    render();
}
}

问题:创建对象时,ID为21,模型名称为“ BotSkinned”(因为我编码为object.name = "BotSkinned")。然后将对象添加到场景中:

    scene.add( object );
    console.log(scene.getObjectByName("BotSkinned").id); //output: 21

通过Raycasting,我想得到那个物体,然后删除它,但是这些删除命令均无效,并且名称和ID也不同。有人知道如何获取正确的object.id吗?那将是最简单的解决方案。 编辑:当然,我只能说scene.remove(scene.getObjectByName("BotSkinned")),但是光线投射应该可以给我确切的对象,因为将来我会拥有很多这些对象。

1 个答案:

答案 0 :(得分:0)

这是正确的ID:intersects [0] .object.parent.parent.parent.id; 因此,现在可以轻松删除它:scene.remove(scene.getObjectById(intersects [0] .object.parent.parent.parent.id))。 希望它与gltf,collada等类似。.