Компонент static-body является частью системы физики в
A-Frame и используется для создания объектов, которые взаимодействуют с
физическим миром, но не подвержены динамическим силам,
таким как гравитация или столкновения с другими телами в плане движения.
Он часто применяется для построения земли, стен, платформ и
любых неподвижных препятствий.
Компонент интегрируется с физическими движками, такими как Cannon.js или Ammo.js, через библиотеку
aframe-physics-system. При применении
static-body к сущности она становится частью физического
мира, но не реагирует на силы: она только влияет на динамические тела,
сталкиваясь с ними.
Подключение static-body происходит через атрибут
сущности:
<a-entity static-body></a-entity>
Простое использование:
<a-box position="0 0.5 -3" rotation="0 45 0" color="#4CC3D9" static-body></a-box>
position и rotation задают расположение и
ориентацию объекта.color — визуальное оформление.static-body превращает объект в неподвижное физическое
тело.Если физическая система не подключена, компонент работать не будет. Подключение физической системы:
<script src="https://cdn.jsdelivr.net/npm/aframe@1.4.2/dist/aframe.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/aframe-physics-system@4.0.1/dist/aframe-physics-system.min.js"></script>
static-body поддерживает ряд параметров, позволяющих
настроить физическое взаимодействие:
shape — определяет форму физического тела. Возможные значения:
box — прямоугольный параллелепипед (по умолчанию для
<a-box>).sphere — сфера (по умолчанию для
<a-sphere>).cylinder — цилиндр (по умолчанию для
<a-cylinder>).mesh — сложная форма, использующая геометрию меша.mass — вес тела. Для static-body
всегда 0.
collisionFilterGroup и collisionFilterMask — управляют группами столкновений.
interval — интервал обновления столкновений, может оптимизировать производительность для больших сцен.
Пример использования с параметром shape:
<a-sphere position="0 1 -5" radius="1.25" color="#EF2D5E" static-body="shape: sphere"></a-sphere>
Объекты с static-body не двигаются
сами, но оказывают влияние на динамические тела
(dynamic-body). Например, мяч, падающий на платформу с
static-body, отскочит и изменит
траекторию, но платформа останется неподвижной.
Пример сцены:
<a-scene physics="gravity: -9.8">
<a-plane position="0 0 -5" rotation="-90 0 0" width="10" height="10" color="#7BC8A4" static-body></a-plane>
<a-box position="0 2 -5" depth="1" height="1" width="1" color="#4CC3D9" dynamic-body></a-box>
</a-scene>
В данном примере <a-plane> является статическим
телом, удерживающим падающий <a-box>.
mesh для сложной геометрииИногда нужно, чтобы физическое тело точно соответствовало форме
визуального объекта. Для этого используется
shape: mesh:
<a-entity gltf-model="#treeModel" static-body="shape: mesh"></a-entity>
Особенности:
box, sphere или
cylinder.box,
sphere, cylinder потребляют меньше
ресурсов.collisionFilterMask.<a-box static-body="interval: 200"></a-box>
static-body не реагирует на силы и
гравитацию.rotation при
инициализации.Статические тела могут быть частью интерактивной сцены:
<a-box position="0 0.5 -3" color="#FFC65D" static-body
animation="property: rotation; to: 0 360 0; loop: true; dur: 5000"></a-box>
Хотя объект вращается визуально, его физическая форма остаётся
статичной и не влияет на динамику других тел в процессе
анимации, если вращение не сопровождается обновлением
физического состояния через body.sync().
aframe-physics-system.dynamic-body вместо
static-body для неподвижных объектов.Компонент static-body является фундаментальным элементом
при построении реалистичных сцен с физикой. Он
обеспечивает стабильность и контроль над объектами, которые должны
оставаться неподвижными, но участвовать в коллизиях, создавая основу для
динамических взаимодействий.