A-Frame — это фреймворк для создания виртуальной реальности на основе WebVR и WebXR, построенный поверх HTML и JavaScript. Основной способ подключения библиотеки — через CDN. Это позволяет быстро начать работу без установки дополнительных пакетов.
Подключение через CDN:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Пример A-Frame</title>
<script src="https://aframe.io/releases/1.4.0/aframe.min.js"></script>
</head>
<body>
<a-scene>
<a-box position="0 1 -5" rotation="0 45 0" color="#4CC3D9"></a-box>
<a-sphere position="2 1 -5" radius="1.25" color="#EF2D5E"></a-sphere>
<a-cylinder position="-2 0.75 -5" radius="0.5" height="1.5" color="#FFC65D"></a-cylinder>
<a-plane position="0 0 -4" rotation="-90 0 0" width="10" height="10" color="#7BC8A4"></a-plane>
<a-sky color="#ECECEC"></a-sky>
</a-scene>
</body>
</html>
В данном примере подключение библиотеки происходит через тег
<script>. Основной контейнер сцены создаётся с
помощью <a-scene>. Все объекты сцены
(<a-box>, <a-sphere>,
<a-cylinder>, <a-plane>,
<a-sky>) являются элементами HTML с атрибутами,
задающими позицию, цвет, размеры и ориентацию.
A-Frame не требует сложной структуры проекта. Для небольших проектов достаточно одного HTML-файла, включающего:
<head> с подключением A-Frame и возможных
дополнительных компонентов.<body> с <a-scene>, содержащим
объекты сцены.Для крупных проектов рекомендуется разделять:
index.html — основная сцена.js/ — кастомные скрипты и компоненты.assets/ — модели, текстуры, аудио и видео.css/ — стили для HUD и интерфейса.После подключения библиотеки и создания <a-scene>
достаточно открыть HTML-файл в современном браузере с поддержкой WebXR
или WebVR. В Chrome и Firefox поддержка виртуальной реальности
реализована через WebXR API. Если устройство поддерживает VR-шлем, сцена
автоматически подстраивается под него.
Элементы сцены обладают следующими ключевыми свойствами:
x y z. Например, position="0 1 -5".x y z.A-Frame предоставляет набор стандартных примитивов:
<a-box> — куб или прямоугольник.<a-sphere> — сфера.<a-cylinder> — цилиндр.<a-plane> — плоская поверхность.<a-sky> — фон сцены, имитирующий небо.Каждый примитив может быть дополнен анимацией, физикой и
интерактивными компонентами. Например, для вращения объекта используется
компонент animation:
<a-box position="0 1 -5" color="#4CC3D9"
animation="property: rotation; to: 0 360 0; loop: true; dur: 5000">
</a-box>
В этом примере куб вращается вокруг вертикальной оси бесконечно с продолжительностью 5 секунд за полный оборот.
Для загрузки 3D-моделей используется тег <a-asset>
в сцене. Он обеспечивает предварительную загрузку ресурсов:
<a-scene>
<a-assets>
<a-asset-item id="treeModel" src="assets/models/tree.gltf"></a-asset-item>
<img id="grassTexture" src="assets/textures/grass.jpg">
</a-assets>
<a-entity gltf-model="#treeModel" position="0 0 -5"></a-entity>
<a-plane src="#grassTexture" rotation="-90 0 0" width="10" height="10"></a-plane>
</a-scene>
Использование <a-assets> гарантирует, что все
ресурсы будут загружены перед рендерингом сцены, предотвращая появление
пустых объектов.
A-Frame поддерживает события DOM-подобного формата. Простейший пример — изменение цвета при наведении курсора:
<a-box position="0 1 -5" color="#4CC3D9"
event-set__enter="_event: mouseenter; color: #EF2D5E"
event-set__leave="_event: mouseleave; color: #4CC3D9">
</a-box>
Компонент event-set позволяет легко создавать реакцию
объектов на события mouseenter, mouseleave,
click и другие.
Компоненты позволяют расширять функциональность объектов. Пример создания кастомного компонента для вращения:
<script>
AFRAME.registerComponent('spin', {
schema: { speed: { type: 'number', default: 1 } },
tick: function (time, timeDelta) {
this.el.object3D.rotation.y += this.data.speed * timeDelta / 1000;
}
});
</script>
<a-box position="0 1 -5" color="#4CC3D9" spin="speed: 2"></a-box>
Компонент spin применяет вращение к объекту с указанной
скоростью. Использование tick обеспечивает постоянное
обновление состояния объекта в каждом кадре.
Камера в A-Frame задаётся тегом <a-camera>. Она
может быть включена в сцену с дополнительными контроллерами:
<a-camera position="0 1.6 0">
<a-cursor></a-cursor>
</a-camera>
<a-cursor> добавляет точку прицеливания для
взаимодействия с объектами сцены.wasd-controls для передвижения и look-controls
для вращения взгляда.Для больших сцен рекомендуется:
instancing для
повторяющихся элементов.<a-assets>.После правильного подключения A-Frame и создания
<a-scene> можно строить интерактивные VR-окружения с
использованием стандартных примитивов, импортируемых моделей,
пользовательских компонентов и событий. Работа с камерой, анимациями и
ресурсами обеспечивает полный контроль над визуальной и интерактивной
частью сцены.