更改启用或对象属性后,Aframe raycaster 未命中
Aframe raycaster does not hit after changing enabled or objects properties
我希望我的 raycaster 仅在按下 vive 控制器的触发器时寻找交叉点。
我想用对象中的假 class 初始化 raycaster,将其更改为真实的 .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 部分寻找交叉点,它会起作用。但这是一种变通方法,它也使我无法在按住触发器的同时使用相交元素和做事。我仍然想知道为什么启用 ray/change 目标对象并立即查找交叉点不起作用。
我建议使用 raycaster.enabled
属性 而不是换成虚拟 class。
光线投射器每帧检查一次交叉点(或 raycaster.interval
是什么)。按下触发器时,启用光线投射器,但必须等到下一帧才能拾取交叉点。
您可以在检查前通过 raycaster.checkIntersections()
或 运行 或 setTimeout
手动调用相交检查。
我希望我的 raycaster 仅在按下 vive 控制器的触发器时寻找交叉点。
我想用对象中的假 class 初始化 raycaster,将其更改为真实的 .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 部分寻找交叉点,它会起作用。但这是一种变通方法,它也使我无法在按住触发器的同时使用相交元素和做事。我仍然想知道为什么启用 ray/change 目标对象并立即查找交叉点不起作用。
我建议使用 raycaster.enabled
属性 而不是换成虚拟 class。
光线投射器每帧检查一次交叉点(或 raycaster.interval
是什么)。按下触发器时,启用光线投射器,但必须等到下一帧才能拾取交叉点。
您可以在检查前通过 raycaster.checkIntersections()
或 运行 或 setTimeout
手动调用相交检查。