AFRAME raytrace получает ссылку на пересекающуюся сущность - PullRequest
0 голосов
/ 21 ноября 2018

Я получил компонент raycaster, подключенный к объекту контроллера vr:

 <a-entity id="righthand" 
          vive-controls="hand: right; " 
          oculus-touch-controls="hand: right;"
          controls-ui
          collider-check
       >
        <a-entity raycaster="objects: .collidable; showLine: true; far: 100; " line="color: blue; opacity: 0.5" ></a-entity>

</a-entity>

, и я получил объект в сцене, который будет получать события raytrace:

<a-entity id='myCube' class="collidable" position="0 1.25 -6"  obj-model="obj: #cube-obj; mtl: #cube-mtl" >
       </a-entity>

Как сделатьЯ получаю идентификатор или любую ссылку на столкнувшуюся сущность в событии 'raycaster-intersected'?Я попытался следующий код, и, кажется, ничего не содержит эти данные:

AFRAME.registerComponent('collider-check', {
  dependencies: ['raycaster'],

  init: function () {
    this.el.addEventListener('raycaster-intersected', function (evt) {

      console.log(evt.detail.el);  // not here

      console.log(evt.detail.intersection); // not here

      console.log(evt.detail);// not here

      console.log('Player hit something!');
    });
  }
});

Заранее спасибо.

--------- Обновление -----------

@ Петр Адам Милевский ответ правильный.Событие, которое нужно прослушать, это пересечение с Raycaster вместо пересечение с Raycaster .Таким образом, вы можете зациклить массив пересекающихся объектов.

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

1 Ответ

0 голосов
/ 21 ноября 2018

Из документов :

  • raycaster-intersected испускается на пересекаемом объекте.Он содержит информацию об объекте лучевого вещания и сведения о пересечении.
  • raycaster-intersection излучается на объекте лучевого вещания и содержит список пересекаемых объектов.

При использовании raycaster-intersectionпопробуйте получить доступ к evt.detail.els для массива пересекающихся объектов.Пример здесь


Поскольку raycaster-intersected излучается на пересекающемся объекте, вы можете определить, коснулся ли лучевой луч вашей цели.

target.addEventListener('raycaster-intersected', (e)=> { 
  // intersected, e.target contains the element
  // e.detail.getIntersection(e.target) contains info about the intersection
})

Fiddle здесь .Скрипка с getIntersection() здесь .

...