【发布时间】:2018-06-12 02:23:49
【问题描述】:
我导入了一个包含几个子对象的 3D 模型,现在我想获得一个特定的子网格。
当我使用.getObjectByName("Cylinder", true) 时,我总是返回undefined,尽管模型有一个具有指定名称的子对象:
有没有办法获取子对象?
【问题讨论】:
标签: javascript three.js aframe
我导入了一个包含几个子对象的 3D 模型,现在我想获得一个特定的子网格。
当我使用.getObjectByName("Cylinder", true) 时,我总是返回undefined,尽管模型有一个具有指定名称的子对象:
有没有办法获取子对象?
【问题讨论】:
标签: javascript three.js aframe
一段代码会很有用,但是当您尝试在模型实际加载之前访问模型属性时,会发生很常见的issue。
Don McCurdy 加载器以及内置加载器正在使用 three.js 异步加载器。在模型实际加载之前,您无法访问它的属性。
我建议监听 model-loaded 事件,它似乎是在 a-frame 加载器中发出的,至少是 glTF one 和 obj 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});
否则,至少你会知道问题不在于加载。
【讨论】: