【问题标题】:Aframe raycaster does not hit after changing enabled or objects properties更改启用或对象属性后,Aframe raycaster 未命中
【发布时间】:2019-08-18 04:36:45
【问题描述】:

我希望我的光线投射器仅在按下我的 vive 控制器的触发器时寻找交叉点。 我想用对象中的假类初始化光线投射器,将其更改为真实的 .prop 并收集 intersectedEls

let rightHand = document.getElementById('rightController');
rightHand.setAttribute('line', 'color: purple; opacity: 1;');
rightHand.setAttribute('raycaster', { showLine: true, objects: '.none' });
rightHand.setAttribute('cursor', { downEvents: ['triggerdown'], upEvents: ['triggerup'], rayOrigin: 'entity', fuse: false });

let scene = document.getElementById('scene');
scene.addEventListener('triggerdown', this.myTriggerDown);
scene.addEventListener('triggerup', this.myTriggerUp);

myTriggerDown() {
    let rightHand = document.getElementById('rightController');
    rightHand.setAttribute('raycaster', { showLine: true, objects: '.prop' });
    rightHand.components['raycaster'].refreshObjects();

    let raycaster = rightHand.components['raycaster'];
    let intersectedEls = raycaster.intersectedEls;

    if (typeof intersectedEls !== 'undefined' && intersectedEls.length > 0) {
        scene.components['resize'].enableResize(intersectedEls[0]);
    } else {
        console.log('1234 no intersections')
    }
}
myTriggerUp() {
   let rightHand = document.getElementById('rightController');
   rightHand.setAttribute('raycaster', { showLine: true, objects: '.none' });
}

不幸的是,我不断收到console.log('1234 no intersections') 消息。

我尝试添加 refreshObjects() 行,但没有任何效果。 我尝试切换enabled 属性而不是更改objects,但结果仍然相同。

任何帮助将不胜感激。谢谢

编辑:

如果我在 triggerup 部分寻找交叉点,它会起作用。但这是一种解决方法,它也使我无法使用相交元素并在按住触发器的同时做事。我仍然想知道为什么启用光线/更改目标对象并立即寻找交叉点不起作用。

【问题讨论】:

    标签: javascript three.js aframe raycasting


    【解决方案1】:

    我建议使用 raycaster.enabled 属性而不是交换到虚拟类。

    光线投射器每帧检查一次交叉点(或raycaster.interval 是什么)。触发时,您启用光线投射器,但您必须等到下一帧才能拾取交叉点。

    您可以通过raycaster.checkIntersections() 手动调用交叉点检查或在检查前运行setTimeout

    【讨论】:

    • 我确实尝试过将raycaster.enabledsetTimeout 结合使用,但还是不行。
    • 这不是我的建议。我提到要调用 checkIntersections。
    • 哦!抱歉,我没有注意到。 checkIntersections() 正是我所需要的。不幸的是,我无法在文档中找到任何有关它的信息。谢谢!
    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多