A-Frame. События

Всем привет! Моя первая заметка по существу в данном блоге. Скорее всего их будет много, так как программирование виртуальной реальности - это что-то очень объемное, непонятное, безграничное. Слишком много всего, о чем даже не подозреваешь. Поэтому по началу будут заметки чуть ли не на каждый чих, потому что даже простейшие на первый вид вещи делаются не так просто, освоение занимает часы, а через несколько дней можно забыть напрочь (пока осваиваешь другие непонятные вещи). До этого были некоторые задачи, но я их не стал описывать, ибо до этого времени вообще все слишком абстрактно было. А сейчас вот уже какие-то ощутимые шаги есть, боле менее понятные задачи и какие-то решения по ним найдены. Вот и решил, что уже можно. Но данная статья пока еще не в формате мануала "виртуальная реальность с нуля", а просто личная заметка по событиям. Но, думаю, скорее всего какой-то цикл статей по этой теме появится скоро, когда боле менее сформируется понимание этой области. Пока что, кому интересно, можете начать с довольно простого примера: aframe-react, или вот еще очень хорошая вводная статья: https://habr.com/ru/post/439416/. Итак, сегодняшняя тема: навесить события на отдельные объекты (кубы, конусы и т.п.) в нашей виртуальной реальности. Отдельная заметка возникла по причине того, что этот момент весьма неочевиден. Приводится множество примеров, но они в большинстве случаев не работают в браузере. Вероятно, в VR-шлеме оно и будет все работать, но пока что тесты проводятся в браузере, а там они не работают, события не срабатывают. Методом проб и ошибок, а так же на основе отдельных примеров, вывел два варианта: 1. Добавить на сцену камеру с курсором. Пример: Тогда на сцене по центру появится курсор. Когда двигаем сцену и курсор попадает на какой-нибудь объект, все события (клики и т.п.) в любой части сцены вызываются на целевом объекте. 2. Добавить атрибут cursor тегу сцены. Пример: Тогда объекты становятся кликабельными, а при наведении мышкой появляется вполне привычный курсор. В таком случае события срабатывают на конкретных конечных объектах, что очень удобно. Здесь есть момент: в таком виде выпоняемый код генерит предупреждения: Примерная суть сообщения: в целях улучшения производительности укажите с каким атрибутом объекты должны учитываться в событиях. То есть для решения этого надо указать маску, а объектам добавить эти параметры. Пример: То есть если у вас на сцене несколько объектов, события будут срабатывать только на тех, которые имеют атрибут data-raycastable.