Если вы хотите знать только, есть ли какое-либо пересечение
Используйте прослушиватели событий для хранения информации о том, пересекается ли ваш луч или нет, и проверьте ее в пределах shoot()
функция:
...
init: function() {
this.isIntersecting = false
this.el.addEventListener("raycaster-intersection", (e) => {
this.isIntersecting = true
}
this.el.addEventListener("raycaster-intersection-cleared", (e) => {
this.isIntersecting = false
}
},
shoot: function() {
if (this.isIntersecting) {
// the raycaster is intersecting
}
...
Если вы хотите детализировать, с какой сущностью вы пересекаетесь:
Вы можете проверить, с какими элементами пересекает raycaster с помощью intersectedEls
свойство компонента:
rayEl.components['raycaster'].intersectedEls
Когда вы нажмете на кнопку, вы сможете оттуда выбрать объекты.
shoot: function() {
// do something with this.el.components['raycaster'].intersectedEls
}
Fiddle здесь .
Если вы хотите, чтобы объект raycaster активно проверял пересечения только при щелчке, вы можете установить raycasters enabled
свойство true только тогда, когда вам это нужно.Хотя raycaster нужно время, отсюда и мое время ожидания.
shoot() {
ray.setAttribute("raycaster", "enabled", "true")
setTimeout((e)=> {
console.log(ray.components['raycaster'].intersectedEls)
ray.setAttribute("raycaster", "enabled", "false")
}, 500)
}
Fiddle здесь .