Javascript 三个js隐藏多个对象只隐藏单个对象

Javascript 三个js隐藏多个对象只隐藏单个对象,javascript,debugging,three.js,rendering,Javascript,Debugging,Three.js,Rendering,当我设置灯光对象名称light.name='globalLight'时遇到了一个问题,我正在生成一个变量,即lightGlobal=scene.getObjectByName('globalLight')但当我试图使用lightGlobal.visible=false隐藏时它只是让另一个灯光不隐藏,绿色的是light0,蓝色的是light1渲染示例 问题 正如你所看到的,蓝光消失了,但绿光无法隐藏 我的代码: ambient = new THREE.AmbientLight( 0x404040

当我设置灯光对象名称
light.name='globalLight'
时遇到了一个问题,我正在生成一个变量,即
lightGlobal=scene.getObjectByName('globalLight')但当我试图使用
lightGlobal.visible=false隐藏时它只是让另一个灯光不隐藏,绿色的是
light0
,蓝色的是
light1
渲染示例 问题

正如你所看到的,蓝光消失了,但绿光无法隐藏

我的代码:

ambient = new THREE.AmbientLight( 0x404040 );
scene.add( ambient );
lightCam = new THREE.DirectionalLight( 0xffffff, 1.0 );
light0 = new THREE.PointLight( 0x0000ff, 1.0 );
light0.position.set( 4.0, 4.0, 4.0 );
light0.castShadow = true;
light0.name = "globalLight";
light1 = new THREE.PointLight( 0x00ff00, 1.0 );
light1.position.set( 4.0, 4.0, -4.0 );
light1.castShadow = true;
light1.name = "globalLight";

scene.add( light0, light1 );

globalLight = scene.getObjectByName( "globalLight", true );
globalLight.visible = false;

Object3D.name
必须是唯一的。因此,不支持以相同的方式命名两个灯光
Object3D.getObjectByName()
将返回与给定名称匹配的第一个对象

此问题的一个解决方案是使用
Object3D.userData
并定义自定义属性,如:

light0.userData.tag='globalLight';

您可以考虑通过以下方法来增强<代码> Objd3D/<代码>:

THREE.Object3D.prototype.getObjectsByTag=函数(标记、结果){
//检查当前对象
if(this.userData.tag==tag)result.push(this);
//检查儿童
for(设i=0,l=this.children.length;i