Threejs中如何获取一类对象中的某一个子类,返回这一子类

场景描述

场景中有十几个车,每个车上(都有一个相同的name属性)都有一个共同的指示牌,指示牌的属性name都一样。现在想让每辆车的指示牌的颜色都不一样。

解决思路

getElementsByClassName()/getElementsByTagName()/getElementsByName() 接触多了就想threejs是否也提供了一个类似的方法来获取一个集合。
在Object3D中查找方法发现getObjectById()/getObjectByName()/getObjectByProperty()都是返回的第一个匹配的对象。因此看来需要自己动手来写这个方法了。

解决方法

THREE.Object3D.prototype.getObjectsByTag = function( tag, result ) {
    
    

  // 检查当前对象

  if ( this.userData.tag === tag ) result.push( this );
  
  // 检查子对象

	for ( var i = 0, l = this.children.length; i < l; i ++ ) {
    
    

        var child = this.children[ i ];

        child.getObjectsByTag( tag, result );

	}
   
  return result;

};

var objects = [];
scene.getObjectsByTag( 'car', objects ); // userData.tag = car的对象

猜你喜欢

转载自blog.csdn.net/u013270347/article/details/88748166
今日推荐