Aframe: Как связать сущности, чтобы пользователь мог связывать / отменять связь сущностей, и таким образом сущности будут анимироваться вместе и взаимодействовать вместе

Как бы я связал и разорвал несколько сущностей вместе, чтобы они могли быть анимированы вместе.

Примером является то, что есть небольшая куча сущностей. Когда я нажимаю на эту кучу, она растекается и направляется вверх к пользователю, так что это уже не куча, а ряд незаметных объектов, каждый из которых разделен небольшим расстоянием.

Куча существует из 3 сущностей A, B и C

Если я нажму на объект с идентификатором A, то все они масштабируются / позиционируются / поворачиваются обратно в кучу.

Если я нажму на идентификатор сущности B, то все сущности переместятся влево. Если я нажимаю на сущность C, то C покидает кучу, и ее движения больше не связаны с кучей.

Есть еще одна куча с сущностями X, Y и Z

Если сущность X, Y или Z находится рядом с сущностью C, тогда сущность C объединяет кучу X, Y, Z. Если пользователь нажимает на объект Z и перетаскивает его, чтобы быть рядом с объектом A или B, тогда объект Z присоединяется к куче A & B,

Таким образом, если щелкнуть объект A, то A, B и Z будут масштабироваться, вращаться и располагаться вместе.

1 ответ

Я считаю, что основной вопрос заключается в том, как переопределить сущности в контейнеры сущностей и из них, при условии, что понятно, что анимация / перемещение контейнера сущностей перемещает все его дочерние элементы, и как прослушивать события щелчка. Вот контейнер:

<a-entity id="groupContainer" animation__position="..." animation__scale="..." animation__rotation="...">
  <a-entity class="child"></a-entity>
  <a-entity class="child"></a-entity>
  <a-entity class="child"></a-entity>
</a-entity>

Пока нет чистого способа переопределить объекты A-Frame на уровне DOM, так как отсоединение / повторное присоединение удалит / повторно инициализирует все компоненты. Вы можете переместить объект с помощью three.js.

var someOtherContainer = document.getElementById('someOtherContainer').object3D;
var childToReparent = document.querySelector('#someChildToRemoveFromContainer');
someOtherContainer.add(childToReparent);
Другие вопросы по тегам