JavaScript Components
8thwall-camera
Компонент камеры 8thwall.
Устарело: Используйте компоненты из https://github.com/WonderlandEngine/wonderland-ar-tracking вместо этого.
Param | Type | Description |
---|---|---|
deprecated | bool |
anchor
Устанавливает местоположение объекта на основе местоположения XRAnchor
Создайте привязки, используя статическую функцию Anchor.create()
.
Пример использования с курсором:
Param | Type | Description |
---|---|---|
persist | bool | |
uuid | string | Уникальный идентификатор для загрузки постоянной привязки или пустая/null при неизвестном значении |
audio-listener
Представляет компонент аудиослушателя Wonderland. Обновляет позицию и ориентацию экземпляра WebAudio слушателя.
Примечание: Активным должен быть только один слушатель в любой момент времени.
audio-source
Представляет аудиофайл в Wonderland Engine, позволяя воспроизведение аудиофайлов.
cursor
3D курсор для настольных компьютеров/мобильных устройств/VR.
Реализует курсор с отслеживанием направленных лучей в сцене. Чтобы реагировать на щелчки/навизание/снятие навизания/вниз курсора/вверх курсора/перемещение, используйте cursor-target.
Для VR луч направляется в направлении this.object.getForward(). Для настольных компьютеров и мобильных устройств вектор направленности инверсно проецируется, чтобы учитывать, где на экране пользователь щелкнул мышью.
.globalTarget
можно использовать для вызова обратных вызовов для всех объектов, даже тех, у которых
нет прикрепленного целевого курсора, но они соответствуют группе столкновения.
.hitTestTarget
можно использовать для вызова обратных вызовов результатов теста столкновения WebXR,
Смотрите Пример анимации.
Param | Type | Description |
---|---|---|
collisionGroup | int | Группа столкновения для направленного луча. Только объекты в этой группе будут подвергаться воздействию этого курсора. |
cursorObject | object | (необязательно) Объект, визуализирующий местоположение попадания курсора. |
cursorRayObject | object | (необязательно) Объект, визуализирующий луч курсора. |
cursorRayScalingAxis | enum | Ось, вдоль которой следует масштабировать cursorRayObject . |
handedness | enum | Определение руки для VR курсоров для принятия событий триггера только от соответствующего контроллера. |
maxDistance | float | Максимальная дистанция для направленного луча курсора. |
rayCastMode | enum | Режим направления лучей, использовать ли PhysX или простые компоненты столкновения |
styleCursor | bool | Устанавливать ли стиль CSS для курсора мыши на настольных компьютерах |
useWebXRHitTest | bool | Использовать тест на попадание WebXR, если доступен. |
Прикрепляет компонент hit-test-location к cursorObject, который будет использоваться курсор для отправки событий на hitTestTarget с HitTestResult.|
cursor-target
Цель для кликов/наведения/перемещения/кнопки для cursor.
Чтобы активировать код при нажатии, наведении, снятии наведания, перемещении курсора, нажатии
или отпускании кнопки курсора, используйте .addClickFunction(f)
,
.addHoverFunction(f)
, .addUnHoverFunction(f)
,
.addMoveFunction(f)
, .addDownFunction(f)
и
.addUpFunction(f)
соответственно с любой function f() {}
.
Чтобы вызвать участников на другом компоненте, вы можете настроить целевой курсор, как следует:
Функции:
1const target = this.object.getComponent(CursorTarget);
2const callback = function(object, cursorComponent) {};
3
4target.onHover.add(callback);
5target.onHover.remove(callback);
6
7target.onUnHover.add(callback);
8target.onUnHover.remove(callback);
9
10target.onClick.add(callback);
11target.onClick.remove(callback);
12
13target.onMove.add(callback);
14target.onMove.remove(callback);
15
16target.onDown.add(callback);
17target.onDown.remove(callback);
18
19target.onUp.add(callback);
20target.onUp.remove(callback);
Требования:
- компонент
collision
должен быть прикреплен к тому же объекту.
Смотрите Пример анимации.
debug-object
Выводит некоторое ограниченное отладочное описание о объекте.
Информация состоит из: Имя этого объекта, имя параметра объекта, мировая трансляция объекта, мировая трансформация и локальная трансформация.
Основным образом используется разработчиками движка для отладки или как пример кода.
Param | Type | Description |
---|---|---|
obj | object | Второй объект, чтобы вывести его имя |
device-orientation-look
Получает ориентацию устройства с мобильного устройства и устанавливает ориентацию объекта соответствующим образом.
Полезно для опытов с волшебными окнами.
finger-cursor
0.8.5+Активирует взаимодействие с целями курсора через перекрытие столкновений, например, на кончике пальца отслеживаемой руки.
Требования:
- Компонент столкновения (обычно сфера с радиусом
0.05
) на том же объекте
fixed-foveation
Применяет фиксированное фовеирование после начала сеанса WebXR
Фиксированное фовеирование снижает стоимость затенения на периферии за счет рендеринга с более низким разрешением по краям поля зрения пользователя.
Param | Type | Description |
---|---|---|
fixedFoveation | float | Количество для применения от 0 (нет) до 1 (полное) |
hand-tracking
Удобное отслеживание рук через WebXR Device API “Hand Input” API.
Позволяет отображать руки как сферы-суставы или скинированную сетку.
Чтобы реагировать на захват, используйте this.isGrabbing()
. Для других жестов, обратитесь
к this.joints
- массиву Object3D и используйте индексы суставов, перечисленные
в спецификации WebXR Hand Input.
Часто желательно использовать либо отслеживание руки, либо контроллеры, но не оба одновременно.
Этот компонент предоставляет deactivateChildrenWithoutPose
для скрытия визуализации рук
если доступная поза отсутствует и controllerToDeactivate
для отключения другого объекта, как только доступна поза отслеживания рук.
Вне XR сеансов, отслеживание или контроллеры не активируются и не отключаются
для правильной работы с компонентом vr-mode-active-switch.
Требования:
- Чтобы использовать отслеживание рук, включите “отслеживание суставов” в
chrome://flags
на Oculus Browser для Oculus Quest/Oculus Quest 2.
Смотрите Пример отслеживания рук.
Param | Type | Description |
---|---|---|
controllerToDeactivate | object | Объекты контроллера для активации, включая дочерние, если поза отсутствует |
deactivateChildrenWithoutPose | bool | Деактивировать потомков, если поза не отслеживается |
handSkin | skin | (необязательно) Скин, применяемый к позам отслеживаемых суставов. Если не присутствует, |
сферы суставов будут использоваться для отображения вместо этого. | ||
handedness | enum | Определение руки для получения информации об отслеживании от правой или левой руки |
jointMaterial | material | Материал для использования при отображении. Применяется либо к порожденной скинированной сетке, либо к сферам суставов. |
jointMesh | mesh | (необязательно) Сетка для использования при визуализации суставов |
hit-test-location
Настраивает Тест столкновения API устройства WebXR и размещает объект на месте попадания.
Требования:
- Укажите
'hit-test'
в необходимых или дополнительных функциях на кнопке AR в вашем HTML файле. Смотрите Wastepaperbin AR в качестве примера.
Param | Type | Description |
---|---|---|
scaleObject | bool | Для поддержания обратной совместимости: Надо ли масштабировать объект в 0 и обратно. |
Устарело: Используйте onHitLost и onHitFound вместо.|
image-texture
Загружает изображение с URL и применяет его как diffuseTexture
или flatTexture
к прикрепленному компоненту сетки.
Поддерживаются материалы с следующих шейдеров:
- “Phong Opaque Textured”
- “Flat Opaque Textured”
- “Background”
- “Physical Opaque Textured”
- “Foliage”
Param | Type | Description |
---|---|---|
material | material | Материал, к которому будет применяться текстура видео |
textureProperty | string | Имя свойства текстуры, которое нужно установить |
url | string | URL для загрузки изображения |
input-profile
Динамическая загрузка и сопоставление профилей ввода для XR контроллеров.
Param | Type | Description |
---|---|---|
addVrModeSwitch | bool | Если true, добавляет компонент переключения в VR режим к загруженной модели контроллера. |
customBasePath | string | Необязательная папка для загрузки пользовательских профилей ввода XR. |
defaultBasePath | string | Основной путь, где хранятся профили ввода XR. |
defaultController | object | Модель 3D контроллера по умолчанию, использующаяся, когда пользовательская модель не может быть загружена. |
handedness | enum | Индекс, представляющий предназначенность контроллера (0 для левого, 1 для правого). |
mapToDefaultController | bool | Если true, профиль ввода будет сопоставлен с контроллером по умолчанию, и никакая динамическая 3D модель контроллера не будет загружена. |
trackedHand | object | Объект, к которому добавлен компонент HandTracking. |
mouse-look
Контролирует ориентацию камеры через движение мыши.
Эффективно реализован, чтобы влиять на ориентацию объекта только когда мышь двигается.
Param | Type | Description |
---|---|---|
mouseButtonIndex | int | Если “moveOnClick” включено, кнопка мыши, которую следует |
держать нажатой для управления видом | ||
pointerLockOnClick | bool | Включает блокировку указателя при событии “mousedown” на холсте |
@requireMouseDown | bool | Требовать нажатия кнопки мыши для управления видом. |
В противном случае вид всегда будет следовать за движениями мыши | ||
sensitity | float | Чувствительность движения мыши |
orbital-camera
Компонент OrbitalCamera позволяет пользователю вращаться вокруг целевой точки, которая является позицией самого объекта. Вращается на указанном расстоянии.
Примечания: Компонент работает, используя мышь или сенсорный экран. Поэтому он не работает в VR.
Param | Type | Description |
---|---|---|
damping | float | |
maxElevation | float | |
maxZoom | float | |
minElevation | float | |
minZoom | float | |
mouseButtonIndex | int | |
radial | float | |
xSensitivity | float | |
ySensitivity | float | |
zoomSensitivity | float |
plane-detection
Генерирует сетки и столкновения для XRPlanes, используя WebXR Device API - Обнаружение плоскостей.
Param | Type | Description |
---|---|---|
collisionMask | int | Маска столкновения для присвоения новым создаваемым компонентам столкновения или отрицательное значение, если |
компоненты столкновения не должны создаваться. | ||
planeMaterial | material | Материал, присваиваемый создаваемым сеткам плоскостей или null , если сетки не должны создаваться. |
player-height
Устанавливает высоту игрока в виде смещения по оси Y над землей для ‘местных’ и ‘зрительских’ пространств.
Param | Type | Description |
---|---|---|
height | float |
target-framerate
Устанавливает целевую частоту кадров
Обновляет целевую частоту кадров
на ближайшую поддерживаемую целевую частоту кадров
к указанной частоте framerate
.
Целевая частота кадров используется для индикатора VR композитора устройства о том, как часто обновлять экран новыми изображениями. Это означает, что приложение будет запрашиваться для создания кадров в более регулярные интервалы, потенциально тратя меньше времени на кадры, которые вероятно будут пропущены.
Для приложений с высокой нагрузкой, установка подходящей целевой частоты кадров может улучшить стабильность рендеринга приложения и снизить задержки.
Аналогично, целевая частота кадров может быть использована для включения частоты обновления 120Hz на Oculus Quest 2 для более простых приложений.
Param | Type | Description |
---|---|---|
framerate | float |
teleport
Телепорт VR локомоции.
Смотрите Пример телепорта.
Param | Type | Description |
---|---|---|
cam | ? | Камера, не относящаяся к VR для использования вне VR |
camRoot | ? | Корень игрока, объект, который будет позиционироваться при телепортации. |
eyeLeft | ? | Левый глаз для использования в VR |
eyeRight | ? | Правый глаз для использования в VR |
floorGroup | ? | Группа столкновений объектов “пола”, на которые можно телепортироваться |
handedness | ? | Определение руки для VR курсов, чтобы принимать события триггера только от соответствующего контроллера. |
indicatorYOffset | ? | Смещение, применяемое к индикаторному объекту, например, чтобы избежать его пересечения с полом |
maxDistance | ? | Максимальное расстояние для направления лучей PhysX |
rayCastMode | ? | Режим направления лучей, использование ли PhysX или простые компоненты столкновения |
teleportIndicatorMeshObject | ? | Объект, который будет размещен как индикатор того, куда телепортируется игрок. |
thumbstickActivationThreshhold | ? | Насколько сильно нужно оттолкнуть джойстик, чтобы отображался индикатор цели телепортации |
thumbstickDeactivationThreshhold | ? | Насколько сильно нужно освободить джойстик, чтобы выполнить телепорт |
trail
Динамическая трековая сетка
Этот компонент отслеживает мировую позицию объекта, к которому он добавлен. Через фиксированный интервал мировая позиция сохраняется в качестве начальных и конечных точек сегментов трека.
Трек сужается вдоль своей длины. UV текстурные координаты настроены таким образом, чтобы ось U покрывала ширину трека, а ось V длину трека. Это позволяет определить внешний вид трека, используя текстуру.
Param | Type | Description |
---|---|---|
interval | float | Интервал времени перед записью новой точки |
material | material | Материал, применяемый к сетке трека |
resetThreshold | float | Максимальное дельта время в секундах, при превышении которого трек сбрасывается. |
Это предотвращает скачки трека, когда обновления происходят | ||
нерегулярно (например, когда вкладка неактивна). | ||
segments | int | Количество сегментов в сетке трека |
taper | bool | Должен ли трек сужаться |
width | float | Ширина трека (в мировом пространстве) |
two-joint-ik-solver
Обратная кинематика для двухсуставных цепей (например, коленей или локтей)
Param | Type | Description |
---|---|---|
copyTargetRotation | ? | Флаг для копирования вращения из цели в конец |
end | ? | Кость, прикрепленная к середине |
helper | ? | Помощник для использования при определении оси вращения сустава |
middle | ? | Кость, прикрепленная к корню |
root | ? | Корневая кость, никогда не движется |
target | ? | Цель, к которой должны стремиться соединения |
video-texture
Загружает видео с URL и применяет его как diffuseTexture
или flatTexture
на указанный материал.
Видео текстуры необходимо обновлять регулярно, когда доступен новый кадр. Этот компонент обрабатывает обнаружение нового кадра и обновляет текстуру, чтобы отображать текущий кадр видео.
Поддерживаются материалы с следующих шейдеров:
- “Phong Opaque Textured”
- “Flat Opaque Textured”
- “Background”
- “Physical Opaque Textured”
- “Foliage”
К видео можно получить доступ через this.video
:
Смотрите Пример с видео.
Param | Type | Description |
---|---|---|
autoplay | bool | Начинать автоматически воспроизводить видео |
loop | bool | Зациклить видео |
material | material | Материал для применения текстуры видео |
muted | bool | Отключить звук |
textureProperty | string | Имя свойства текстуры, которое нужно установить |
url | string | URL для загрузки видео |
vr-mode-active-switch
Позволяет переключать другие компоненты на объекте в состояние активного/неактивного в зависимости от того, активен ли VR/AR сеанс.
Полезно для скрытия контроллеров до тех пор, пока пользователь не войдет в VR.
Param | Type | Description |
---|---|---|
activateComponents | ? | Когда компоненты должны быть активны: в VR или не в VR |
affectChildren | ? | Должны ли быть затронуты компоненты дочерних объектов |
vrm
Компонент для загрузки и работы с моделями VRM 1.0.
Позирование модели должно выполняться исключительно путем вращения костей. Они могут быть
доступны через свойство .bones
и следовать названию костей VRM. Учтите, что не
все модели VRM будут содержать все возможные кости. Поза покоя (Т-поза) сохраняется в
свойстве .restPose
. Сбросить кость в позу покоя можно следующим образом:
1vrmComponent.bones[vrmBoneName].rotationLocal = vrmComponent.restPose[vrmBoneName];
Перемещение модели по миру должно осуществляться путем перемещения объекта, к которому принадлежит данный компонент. Иными словами, перемещая корень модели VRM. Кости и любые дочерние объекты не следует использовать для перемещения модели VRM.
Ядро расширения VRMC_vrm
, а также VRMC_springBone
и VRMC_node_constraint
поддерживаются.
Ограничения:
- Нет поддержки для
VRMC_material_mtoon
- Выражения не поддерживаются
- Основное отслеживание направления взгляда по выражениям не поддерживается
- Режим аннотации сетки
auto
не поддерживается (режим первого лица)
Param | Type | Description |
---|---|---|
lookAtTarget | ? | Объект, на который смотрит VRM |
src | ? | URL к файлу VRM для загрузки |
wasd-controls
Основные движения с помощью клавиш W/A/S/D.
Param | Type | Description |
---|---|---|
headObject | object | Объект, ориентация которого используется для определения направления вперед |
lockY | bool | Флаг для перемещения объекта только по глобальным плоскостям x и z |
speed | float | Скорость движения в м/с. |