从 three.js object3D 访问 A-Frame 元素

Access A-Frame element from three.js object3D

在 A-Frame 中,您可以使用 .object3D.getObject3D() 访问实体的 object3D,当您使用 three.js 对象时,是否有相反的方法,获取对象所属的元素?也许将父元素添加到 userdata?

A-Frame 将实体附加到 object3D 作为 .el

例如带有网格的实体:

document.querySelector('a-entity').getObject3D('mesh').el;

它也附加到组 object3D:

document.querySelector('a-entity').object3D.el;

这是在 setObject3D() 期间完成的。

对于object3D个A-Frame不直接管理,没有直接关联的A-Frame实体,那么我们可以沿着场景图往上走,找到与[=17=最接近的那个].

我写了一个小函数,它使用 traverseAncenstors 向上遍历,returns 如果有一个元素的话。

function getParentEl( o ){
  let p;
  o.traverseAncestors( function( a ){
    if( p === undefined && a.el ){
      p = a;
    }
  });
  if( p ){
    return p.el
  }
  return;
}