我导入了一个3D模型,它有一些子对象,现在我想获得一个特定的子网格。
当我使用.getObjectByName("Cylinder", true)
时,我总是得到undefined
,尽管模型有一个带有指定名称的子对象:
有没有办法获取子对象?
答案 0 :(得分:1)
一段代码会很有用,但是当你试图在实际加载之前访问模型属性时,会发生很常见的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});
否则,至少你会知道问题与加载无关。