2

我已经使用Mozilla 的 A-Frame将 raycaster 连接到了 vive 控制器实体。我希望一些相交的对象在相交时改变不透明度。这些对象在不相交时应该是不可见的(不透明度为 0),相交时不透明度为 0.5。

我设法创建了一个组件,该组件在 raycaster-intersected 事件时触发一个函数。但是,我很难弄清楚如何从此函数更改相交对象的属性。

a-frame raycaster 文档说 raycaster-intersected 事件细节“将包含 el,raycasting 实体和 intersection,一个包含有关交叉点的详细数据的对象。” 我如何访问这些?我尝试了以下并收到错误“未捕获的类型错误:无法读取未定义的属性'setAttribute'”

AFRAME.registerComponent('grid-cube-collider', {
  dependencies: ['raycaster'],
  init: function () {
    this.el.addEventListener('raycaster-intersected', function () {
            this.el.setAttribute('material', 'opacity', '0.5');
    });
  }
});
4

2 回答 2

3

this.el 指的是您的 raycaster 实体,而不是目标实体。目标实体包含在事件详细信息中,通过事件处理程序回调传入。尝试:

this.el.addEventListener('raycaster-intersected', function (evt) {
        evt.detail.el.setAttribute('material', 'opacity', '0.5');
});
于 2016-10-15T06:22:12.133 回答
1

另请参阅https://github.com/bryik/aframe-vive-cursor-component以获得类似的解决方案。

<script src="https://unpkg.com/aframe-vive-cursor-component/dist/aframe-vive-cursor-component.min.js></script>
<a-entity vive-controls="hand: left" vive-cursor></a-entity>
于 2016-10-15T06:36:49.493 回答