Компонент hand-controls предназначен для упрощения
работы с VR-контроллерами и обеспечивает единый интерфейс для
взаимодействия с различными устройствами, включая контроллеры Oculus,
Vive, Windows Mixed Reality и другие. Он автоматически определяет тип
контроллера и назначает соответствующие события и модели.
Синтаксис использования:
<a-entity hand-controls="hand: left"></a-entity>
<a-entity hand-controls="hand: right"></a-entity>
Параметр hand указывает сторону контроллера
(left или right), что позволяет использовать
разные действия для каждой руки.
Компонент интегрирован с предустановленными 3D-моделями контроллеров
для популярных VR-устройств. При подключении hand-controls
A-Frame автоматически подгружает подходящую модель:
Для каждой модели обеспечивается корректное отображение кнопок и стиков, что упрощает визуализацию и взаимодействие.
<a-entity hand-controls="hand: left; model: true"></a-entity>
Ключевой параметр model: true включает автоматическую
подстановку модели устройства. Можно отключить подстановку и
использовать собственную 3D-модель для контроллера, задав
model: false и вложив <a-entity> с
нужной геометрией.
Компонент генерирует стандартные события для кнопок и триггеров:
gripdown / gripup – нажатие и отпускание
кнопки захвата.triggerdown / triggerup – взаимодействие с
триггером.trackpaddown / trackpadup – для тачпада
или джойстика.thumbstickmoved – движение джойстика.axismove – аналогично thumbstickmoved,
возвращает координаты осей.buttonchanged – универсальное событие для всех кнопок,
содержит детальную информацию о состоянии.Пример прослушивания события:
const leftHand = document.querySelector('[hand-controls="hand: left"]');
leftHand.addEventListener('triggerdown', () => {
console.log('Триггер левой руки нажат');
});
События создаются на уровне сущности, что позволяет интегрировать контроллеры с любыми системами взаимодействия: захват объектов, управление интерфейсом, телепортация.
hand-controls поддерживает расширенные настройки:
arm-model, который учитывает наклон
запястья и локтя.Пример подключения arm-model:
<a-entity hand-controls="hand: right" arm-model="arm: true; controllerLength: 0.5"></a-entity>
Параметр controllerLength задает длину виртуального
контроллера для корректной симуляции руки.
model.buttonchanged.laser-controls для телепортации, super-hands
для захвата объектов, interaction-controls для сложных
манипуляций.Пример совместного использования с super-hands:
<a-entity hand-controls="hand: left" super-hands></a-entity>
<a-entity grabbable></a-entity>
Это позволяет захватывать объекты VR-сцен без дополнительной настройки логики контроллера.
Компонент работает на устройствах с WebXR и WebVR, автоматически определяя доступные контроллеры. Важно учитывать:
hand-controls не
создаст объекты руки.arm-model.hand-controls с
super-hands и кастомными событиями для максимальной
гибкости.Этот компонент является базовым элементом для реализации интерактивных VR-сцен, обеспечивая единый и удобный интерфейс для работы с контроллерами разных платформ.