三个js从导入的模型中获取子对象

时间:2018-01-02 11:15:26

标签: javascript three.js aframe

我导入了一个3D模型,它有一些子对象,现在我想获得一个特定的子网格。

当我使用.getObjectByName("Cylinder", true)时,我总是得到undefined,尽管模型有一个带有指定名称的子对象:

enter image description here

有没有办法获取子对象?

1 个答案:

答案 0 :(得分:1)

一段代码会很有用,但是当你试图在实际加载之前访问模型属性时,会发生很常见的issue

Don McCurdy加载器以及内置加载器正在使用three.js异步加载器。在模型实际加载之前,您无法访问它的属性。

我建议听一下model-loaded事件,它似乎是在a-frame加载器中发出的,至少是glTF oneobj one。 Don McCurdy与他的作品一致,因此他的“实验性”装载机应具有相同的机制。它应该像这样工作:

<script>
AFRAME.registerComponent("modelhandler", {
  init:function() {
     this.el.addEventListener("model-loaded", (e)=> 
     let child = obj.getObjectByName( "Cylinder", true );
     console.log(child);
   });
}
</script>

<a-entity gltf-model="url(/path/to/model.gltf)" modelhandler></a-entity>

如果这不起作用,您还可以尝试设置超时5秒(立方体的99%,并且球体将在5秒内加载),然后尝试抓取子对象。尝试在组件中添加这样的东西:

setTimeout(()=>{
  let child = obj.getObjectByName( "Cylinder", true );
  console.log(child);
}, 5000});

否则,至少你会知道问题与加载无关。