Aframe raycaster не срабатывает после изменения включенных или свойств объектов - PullRequest
0 голосов
/ 27 марта 2019

Я хочу, чтобы мой raycaster искал пересечения только тогда, когда нажата кнопка запуска моего контроллера Vive. Я думал инициализировать 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, но у меня все тот же результат.

Любая помощь будет оценена. Спасибо

редактирование:

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

1 Ответ

0 голосов
/ 29 марта 2019

Я рекомендую использовать свойство raycaster.enabled вместо перехода к фиктивному классу.

Raycaster проверяет наличие пересечений один раз за кадр (или что бы то ни было raycaster.interval).При активации триггера вы включаете raycaster, но вам нужно подождать до следующего кадра, чтобы он обнаружил пересечения.

Вы можете вручную вызвать проверку пересечения с помощью raycaster.checkIntersections() или запустить setTimeout перед проверкой.

...