Примитив a-cursor используется для управления точкой
взаимодействия в виртуальной реальности, обычно в сценах с
использованием VR-контроллеров или глазного
отслеживания (gaze-based interaction). Он обеспечивает
возможность выбора объектов, активации событий и навигации в
3D-среде.
a-cursor обычно располагается внутри сущности
a-camera, так как именно камера определяет положение
наблюдателя в сцене. Простейшая структура выглядит следующим
образом:
<a-scene>
<a-camera>
<a-cursor></a-cursor>
</a-camera>
</a-scene>
В этом случае a-cursor будет отображаться как маленький
сферический объект в центре поля зрения, указывая точку, куда направлен
взгляд пользователя.
a-cursorfuse Позволяет включить режим
«затяжного наведения» для взаимодействия без клика. Значение
true активирует автоматическое срабатывание события
click после удержания курсора на объекте заданное
время.
<a-cursor fuse="true" fuse-timeout="1500"></a-cursor>
fuse-timeout — время в миллисекундах до активации
события.rayOrigin Определяет точку начала луча
(Raycaster), которым управляет курсор. Возможные значения:
"entity" — луч исходит из позиции курсора или
сущности;"mouse" — луч следует за курсором мыши (удобно для
десктопного взаимодействия).color и opacity Позволяют
настроить визуальное отображение курсора:
<a-cursor color="#FF0000" opacity="0.8"></a-cursor>
geometry Позволяет задать форму
курсора, например сферу, цилиндр или плоскость. По умолчанию
используется маленькая сфера. Настройка может выглядеть так:
<a-cursor geometry="primitive: ring; radiusInner: 0.01; radiusOuter: 0.02"></a-cursor>
a-cursor тесно интегрируется с компонентом
raycaster, который определяет, какие
объекты в сцене могут быть выбраны. Для того чтобы объект реагировал на
курсор, необходимо добавить компонент class или
raycaster:
<a-box position="0 1.5 -3" color="#4CC3D9" class="clickable"></a-box>
Курсор может использовать события
mouseenter,
mouseleave и
click для взаимодействия:
document.querySelector('.clickable').addEventListener('mouseenter', () => {
console.log('Курсор наведён на объект');
});
document.querySelector('.clickable').addEventListener('mouseleave', () => {
console.log('Курсор покинул объект');
});
document.querySelector('.clickable').addEventListener('click', () => {
console.log('Объект выбран');
});
Режим fuse особенно полезен для VR-гарнитур без
контроллеров. Он позволяет пользователю выбирать объекты
взглядом, без необходимости физического нажатия. Настройка
временной задержки позволяет гибко регулировать отклик:
<a-cursor fuse="true" fuse-timeout="2000" color="#00FF00"></a-cursor>
В этом примере курсор становится зелёным, а событие
click срабатывает после двух секунд удержания на
объекте.
a-cursor может быть использован совместно с
компонентом animation для визуального
отклика на взаимодействие:
<a-box position="0 1.5 -3" color="#4CC3D9" class="clickable"
animation__mouseenter="property: scale; to: 1.2 1.2 1.2; startEvents: mouseenter"
animation__mouseleave="property: scale; to: 1 1 1; startEvents: mouseleave">
</a-box>
Такой подход создаёт эффект увеличения объекта при наведении и возвращает его к исходным размерам при уходе курсора.
Для работы с контроллерами курсор может быть прикреплён к сущности контроллера:
<a-entity laser-controls="hand: right">
<a-cursor></a-cursor>
</a-entity>
В таком случае луч курсора будет исходить из контроллера и позволять
интерактивное выделение объектов в пространстве. Поддерживаются события
mouseenter, mouseleave и click,
идентичные gaze-based взаимодействию.
Смена форм курсора при наведении на объект:
const cursor = document.querySelector('a-cursor');
const box = document.querySelector('.clickable');
box.addEventListener('mouseenter', () => {
cursor.setAttribute('geometry', 'primitive: ring; radiusInner: 0.015; radiusOuter: 0.03');
});
box.addEventListener('mouseleave', () => {
cursor.setAttribute('geometry', 'primitive: sphere; radius: 0.01');
});
Использование кастомных материалов:
<a-cursor material="color: yellow; shader: flat" geometry="primitive: ring; radiusInner:0.01; radiusOuter:0.02"></a-cursor>
a-cursor только внутри a-camera
или контроллера.fuse для устройств без контроллеров.mouseenter и mouseleave
для интерактивной анимации объектов.a-cursor является ключевым инструментом для
интерактивности в A-Frame, обеспечивая гибкость и точность
взаимодействия с 3D-сценами. Он легко комбинируется с анимациями,
кастомными материалами и контроллерами, создавая полноценный опыт
виртуальной реальности.