В A-Frame события сцены играют ключевую роль в управлении жизненным
циклом виртуальной реальности. Среди них особое значение имеют события
enter-vr и
exit-vr, которые сигнализируют о начале и
завершении сеанса VR соответственно. Эти события позволяют реализовать
динамическое поведение сцены при переходе между режимом обычного
просмотра и виртуальной реальности.
enter-vrСобытие enter-vr вызывается, когда
пользователь инициирует вход в VR-режим. В большинстве случаев это
происходит при нажатии на кнопку «Enter VR», автоматически добавляемую
элементом <a-scene> на странице.
Применение события позволяет:
Пример обработки события:
const sceneEl = document.querySelector('a-scene');
sceneEl.addEventListener('enter-vr', () => {
console.log('Пользователь вошёл в VR');
const cameraEl = sceneEl.camera.el;
cameraEl.setAttribute('position', { x: 0, y: 1.6, z: 0 });
});
В этом примере после входа в VR изменяется позиция камеры, чтобы она соответствовала стандартной высоте пользователя. Событие срабатывает один раз при каждом входе в VR, даже если пользователь быстро переключается между VR и обычным режимом.
exit-vrСобытие exit-vr вызывается при выходе
из VR-режима. Это может быть результатом нажатия кнопки «Exit VR»,
закрытия VR-устройства или переключения на обычный режим просмотра.
Типичные задачи при обработке exit-vr:
Пример обработки события:
sceneEl.addEventListener('exit-vr', () => {
console.log('Пользователь покинул VR');
const cameraEl = sceneEl.camera.el;
cameraEl.setAttribute('position', { x: 0, y: 1.0, z: 5 });
});
После выхода из VR камера возвращается в обычное положение, обеспечивая корректный вид для экранного просмотра.
Асинхронность и задержки Переход в VR и выход из
него может занимать несколько миллисекунд, особенно при использовании
WebXR-устройств. Для сложных действий рекомендуется использовать
requestAnimationFrame или таймеры для плавной и безопасной
инициализации элементов сцены.
Взаимодействие с контроллерами и камерой
Обработка enter-vr часто включает включение VR-контроллеров
и настройку камеры под пространство VR. Обработка exit-vr
должна корректно отключать эти элементы, чтобы избежать конфликта
управления.
Множественные срабатывания В некоторых браузерах
событие может срабатывать несколько раз при быстром переключении
режимов. Рекомендуется проверять текущее состояние сцены через
sceneEl.is('vr-mode') перед выполнением ресурсовоемких
операций.
sceneEl.addEventListener('enter-vr', () => {
if (!sceneEl.is('vr-mode')) return;
console.log('Запуск VR-режима безопасно');
});
AFRAME.registerComponent('vr-light', {
init: function () {
const lightEl = this.el;
const sceneEl = this.el.sceneEl;
sceneEl.addEventListener('enter-vr', () => lightEl.setAttribute('intensity', 1.5));
sceneEl.addEventListener('exit-vr', () => lightEl.setAttribute('intensity', 0.5));
}
});
Эти события обеспечивают гибкое управление сценой и позволяют создавать адаптивные приложения, реагирующие на переходы между обычным просмотром и виртуальной реальностью, поддерживая плавность интерфейса и корректное взаимодействие с устройствами.