Режим fuse, или взгляд-клик, представляет собой
метод взаимодействия в виртуальной реальности, при котором пользователь
выбирает объекты с помощью направления взгляда, без использования
контроллеров или мыши. В A-Frame это реализуется через систему
компонентов cursor и параметр fuse: true,
обеспечивая простое и естественное взаимодействие с 3D-сценой.
Для активации режима fuse необходимо использовать компонент cursor на камере. Простейшая конфигурация выглядит так:
<a-entity camera look-controls>
<a-entity cursor="fuse: true; fuseTimeout: 1500"
position="0 0 -1"
geometry="primitive: ring; radiusInner: 0.01; radiusOuter: 0.02"
material="color: cyan; shader: flat">
</a-entity>
</a-entity>
Ключевые элементы:
fuse: true — включает режим fuse.fuseTimeout — время (в миллисекундах), которое
необходимо удерживать взгляд на объекте для срабатывания события
click.geometry и material — визуальное
отображение курсора в виде кольца или другого элемента, показывающего
точку фокусировки взгляда.Форма и цвет курсора важны для понимания пользователем того, на что он смотрит. A-Frame позволяет гибко настраивать визуальный индикатор:
<a-entity cursor="fuse: true; fuseTimeout: 2000"
geometry="primitive: ring; radiusInner: 0.02; radiusOuter: 0.04"
material="color: yellow; shader: flat"
animation__fusing="property: scale; startEvents: mouseenter; from: 1 1 1; to: 1.5 1.5 1.5; dur: 2000">
</a-entity>
Особенности анимации fuse:
animation__fusing реагирует на событие
mouseenter, постепенно увеличивая размер курсора, что
визуально показывает процесс срабатывания fuse.dur совпадает с fuseTimeout, создавая
синхронизированное визуальное представление.Fuse работает через стандартные события A-Frame:
mouseenter, mouseleave и click.
Для объектов, с которыми пользователь может взаимодействовать, важно
прописывать обработчики событий:
<a-box position="0 1 -3" color="red"
event-set__enter="_event: mouseenter; color: green"
event-set__leave="_event: mouseleave; color: red"
fuse-listener>
</a-box>
<script>
AFRAME.registerComponent('fuse-listener', {
init: function () {
this.el.addEventListener('click', () => {
this.el.setAttribute('color', 'blue');
});
}
});
</script>
Пояснение:
mouseenter и mouseleave используются для
мгновенной обратной связи при наведении взгляда.fuse-listener обрабатывает событие
click, которое автоматически срабатывает после удержания
взгляда на объекте заданное время (fuseTimeout).Fuse особенно полезен для платформ без контроллеров (например, мобильная VR). Основные рекомендации:
this.el.addEventListener('mouseenter', () => {
this.el.querySelector('[cursor]').setAttribute('cursor', 'fuseTimeout: 3000');
});
Комбинирование с другими событиями Fuse отлично
работает совместно с компонентами animation,
sound и material, создавая интерактивные и
отзывчивые сцены VR.
Fuse для меню и интерфейсов Виртуальные панели и кнопки могут использовать gaze-based selection, снижая необходимость контроллеров. Важно поддерживать визуальный отклик для каждого элемента интерфейса.
mouseenter и mouseleave.<a-scene>
<a-entity camera look-controls>
<a-entity cursor="fuse: true; fuseTimeout: 1500"
position="0 0 -1"
geometry="primitive: ring; radiusInner: 0.01; radiusOuter: 0.02"
material="color: cyan; shader: flat"
animation__fusing="property: scale; startEvents: mouseenter; from: 1 1 1; to: 1.5 1.5 1.5; dur: 1500">
</a-entity>
</a-entity>
<a-box position="0 1 -3" color="red" fuse-listener></a-box>
<a-sphere position="2 1 -3" color="blue" fuse-listener></a-sphere>
<a-cylinder position="-2 1 -3" color="green" fuse-listener></a-cylinder>
</a-scene>
В этой сцене три объекта реагируют на взгляд пользователя: цвет изменяется после удержания взгляда заданное время, визуальный индикатор курсора анимирован, что обеспечивает интуитивное взаимодействие.
Режим fuse в A-Frame сочетает простоту настройки с гибкостью визуальных и программных эффектов, позволяя создавать эффективные gaze-based интерфейсы в VR.