Три js получают дочерний объект из импортированной модели

Я импортировал 3D-модель с несколькими дочерними объектами, и теперь я хотел бы получить конкретную дочернюю сетку.

Когда я использую .getObjectByName("Cylinder", true), я всегда получаю undefined, хотя у модели есть дочерний объект с указанным именем:

введите здесь описание изображения

Есть ли способ получить дочерний объект?


person JesterWest    schedule 02.01.2018    source источник


Ответы (1)


Фрагмент кода был бы полезен, но есть довольно распространенный проблема возникает, когда вы пытаетесь получить доступ к свойствам модели до ее фактической загрузки.

Загрузчики Дона МакКарди, а также встроенные загрузчики используют асинхронные загрузчики three.js. Пока модель не загрузится, вы не сможете получить доступ к ее свойствам.

Я бы посоветовал прослушивать событие model-loaded, оно, кажется, генерируется загрузчиками a-frame, по крайней мере, glTF one и объект один. Дон Маккарди соответствует своей работе, поэтому его «экспериментальные» загрузчики должны иметь такие же механизмы. Это должно работать так:

<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});

В противном случае, по крайней мере, Вы будете знать, что проблема не в загрузке.

person Piotr Adam Milewski    schedule 02.01.2018
comment
Исправлено ожидание загрузки модели! Спасибо вам за быстрый ответ. - person JesterWest; 02.01.2018
comment
@JesterWest У меня были те же проблемы, когда я начал играть с моделями в кадре / три :) Рад, что смог помочь! - person Piotr Adam Milewski; 02.01.2018