JavaScript Components

8thwall-camera 

Компонент камеры 8thwall.

Устарело: Используйте компоненты из https://github.com/WonderlandEngine/wonderland-ar-tracking вместо этого.

ParamTypeDescription
deprecatedbool

anchor 

Устанавливает местоположение объекта на основе местоположения XRAnchor

Создайте привязки, используя статическую функцию Anchor.create().

Пример использования с курсором:

1cursorTarget.onClick.add((object, cursor, originalEvent) => {
2    /* Только события в XR будут иметь прикрепленный кадр */
3    if(!originalEvent.frame) return;
4    Anchor.create(anchorObject, {uuid: id, persist: true}, originalEvent.frame);
5});
ParamTypeDescription
persistbool
uuidstringУникальный идентификатор для загрузки постоянной привязки или пустая/null при неизвестном значении

audio-listener 

Представляет компонент аудиослушателя Wonderland. Обновляет позицию и ориентацию экземпляра WebAudio слушателя.

Примечание: Активным должен быть только один слушатель в любой момент времени.

audio-source 

Представляет аудиофайл в Wonderland Engine, позволяя воспроизведение аудиофайлов.

cursor 

3D курсор для настольных компьютеров/мобильных устройств/VR.

Реализует курсор с отслеживанием направленных лучей в сцене. Чтобы реагировать на щелчки/навизание/снятие навизания/вниз курсора/вверх курсора/перемещение, используйте cursor-target.

Для VR луч направляется в направлении this.object.getForward(). Для настольных компьютеров и мобильных устройств вектор направленности инверсно проецируется, чтобы учитывать, где на экране пользователь щелкнул мышью.

.globalTarget можно использовать для вызова обратных вызовов для всех объектов, даже тех, у которых нет прикрепленного целевого курсора, но они соответствуют группе столкновения.

.hitTestTarget можно использовать для вызова обратных вызовов результатов теста столкновения WebXR,

Смотрите Пример анимации.

ParamTypeDescription
collisionGroupintГруппа столкновения для направленного луча. Только объекты в этой группе будут подвергаться воздействию этого курсора.
cursorObjectobject(необязательно) Объект, визуализирующий местоположение попадания курсора.
cursorRayObjectobject(необязательно) Объект, визуализирующий луч курсора.
cursorRayScalingAxisenumОсь, вдоль которой следует масштабировать cursorRayObject.
handednessenumОпределение руки для VR курсоров для принятия событий триггера только от соответствующего контроллера.
maxDistancefloatМаксимальная дистанция для направленного луча курсора.
rayCastModeenumРежим направления лучей, использовать ли PhysX или простые компоненты столкновения
styleCursorboolУстанавливать ли стиль CSS для курсора мыши на настольных компьютерах
useWebXRHitTestboolИспользовать тест на попадание WebXR, если доступен.

Прикрепляет компонент hit-test-location к cursorObject, который будет использоваться курсор для отправки событий на hitTestTarget с HitTestResult.|

cursor-target 

Цель для кликов/наведения/перемещения/кнопки для cursor.

Чтобы активировать код при нажатии, наведении, снятии наведания, перемещении курсора, нажатии или отпускании кнопки курсора, используйте .addClickFunction(f), .addHoverFunction(f), .addUnHoverFunction(f), .addMoveFunction(f), .addDownFunction(f) и .addUpFunction(f) соответственно с любой function f() {}.

Чтобы вызвать участников на другом компоненте, вы можете настроить целевой курсор, как следует:

1start: function() {
2  let target = this.object.addComponent('cursor-target');
3  target.onClick.add(this.onClick.bind(this));
4},
5onClick: function() {
6  console.log(this.object.name, "был нажат!");
7}

Функции:

 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 

Выводит некоторое ограниченное отладочное описание о объекте.

Информация состоит из: Имя этого объекта, имя параметра объекта, мировая трансляция объекта, мировая трансформация и локальная трансформация.

Основным образом используется разработчиками движка для отладки или как пример кода.

ParamTypeDescription
objobjectВторой объект, чтобы вывести его имя

device-orientation-look 

Получает ориентацию устройства с мобильного устройства и устанавливает ориентацию объекта соответствующим образом.

Полезно для опытов с волшебными окнами.

finger-cursor 

0.8.5+

Активирует взаимодействие с целями курсора через перекрытие столкновений, например, на кончике пальца отслеживаемой руки.

Требования:

  • Компонент столкновения (обычно сфера с радиусом 0.05) на том же объекте

fixed-foveation 

Применяет фиксированное фовеирование после начала сеанса WebXR

Фиксированное фовеирование снижает стоимость затенения на периферии за счет рендеринга с более низким разрешением по краям поля зрения пользователя.

ParamTypeDescription
fixedFoveationfloatКоличество для применения от 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.

Смотрите Пример отслеживания рук.

ParamTypeDescription
controllerToDeactivateobjectОбъекты контроллера для активации, включая дочерние, если поза отсутствует
deactivateChildrenWithoutPoseboolДеактивировать потомков, если поза не отслеживается
handSkinskin(необязательно) Скин, применяемый к позам отслеживаемых суставов. Если не присутствует,
сферы суставов будут использоваться для отображения вместо этого.
handednessenumОпределение руки для получения информации об отслеживании от правой или левой руки
jointMaterialmaterialМатериал для использования при отображении. Применяется либо к порожденной скинированной сетке, либо к сферам суставов.
jointMeshmesh(необязательно) Сетка для использования при визуализации суставов

hit-test-location 

Настраивает Тест столкновения API устройства WebXR и размещает объект на месте попадания.

Требования:

  • Укажите 'hit-test' в необходимых или дополнительных функциях на кнопке AR в вашем HTML файле. Смотрите Wastepaperbin AR в качестве примера.
ParamTypeDescription
scaleObjectboolДля поддержания обратной совместимости: Надо ли масштабировать объект в 0 и обратно.

Устарело: Используйте onHitLost и onHitFound вместо.|

image-texture 

Загружает изображение с URL и применяет его как diffuseTexture или flatTexture к прикрепленному компоненту сетки.

Поддерживаются материалы с следующих шейдеров:

  • “Phong Opaque Textured”
  • “Flat Opaque Textured”
  • “Background”
  • “Physical Opaque Textured”
  • “Foliage”
ParamTypeDescription
materialmaterialМатериал, к которому будет применяться текстура видео
texturePropertystringИмя свойства текстуры, которое нужно установить
urlstringURL для загрузки изображения

input-profile 

Динамическая загрузка и сопоставление профилей ввода для XR контроллеров.

ParamTypeDescription
addVrModeSwitchboolЕсли true, добавляет компонент переключения в VR режим к загруженной модели контроллера.
customBasePathstringНеобязательная папка для загрузки пользовательских профилей ввода XR.
defaultBasePathstringОсновной путь, где хранятся профили ввода XR.
defaultControllerobjectМодель 3D контроллера по умолчанию, использующаяся, когда пользовательская модель не может быть загружена.
handednessenumИндекс, представляющий предназначенность контроллера (0 для левого, 1 для правого).
mapToDefaultControllerboolЕсли true, профиль ввода будет сопоставлен с контроллером по умолчанию, и никакая динамическая 3D модель контроллера не будет загружена.
trackedHandobjectОбъект, к которому добавлен компонент HandTracking.

mouse-look 

Контролирует ориентацию камеры через движение мыши.

Эффективно реализован, чтобы влиять на ориентацию объекта только когда мышь двигается.

ParamTypeDescription
mouseButtonIndexintЕсли “moveOnClick” включено, кнопка мыши, которую следует
держать нажатой для управления видом
pointerLockOnClickboolВключает блокировку указателя при событии “mousedown” на холсте
@requireMouseDownboolТребовать нажатия кнопки мыши для управления видом.
В противном случае вид всегда будет следовать за движениями мыши
sensitityfloatЧувствительность движения мыши

orbital-camera 

Компонент OrbitalCamera позволяет пользователю вращаться вокруг целевой точки, которая является позицией самого объекта. Вращается на указанном расстоянии.

Примечания: Компонент работает, используя мышь или сенсорный экран. Поэтому он не работает в VR.

ParamTypeDescription
dampingfloat
maxElevationfloat
maxZoomfloat
minElevationfloat
minZoomfloat
mouseButtonIndexint
radialfloat
xSensitivityfloat
ySensitivityfloat
zoomSensitivityfloat

plane-detection 

Генерирует сетки и столкновения для XRPlanes, используя WebXR Device API - Обнаружение плоскостей.

ParamTypeDescription
collisionMaskintМаска столкновения для присвоения новым создаваемым компонентам столкновения или отрицательное значение, если
компоненты столкновения не должны создаваться.
planeMaterialmaterialМатериал, присваиваемый создаваемым сеткам плоскостей или null, если сетки не должны создаваться.

player-height 

Устанавливает высоту игрока в виде смещения по оси Y над землей для ‘местных’ и ‘зрительских’ пространств.

ParamTypeDescription
heightfloat

target-framerate 

Устанавливает целевую частоту кадров

Обновляет целевую частоту кадров на ближайшую поддерживаемую целевую частоту кадров к указанной частоте framerate.

Целевая частота кадров используется для индикатора VR композитора устройства о том, как часто обновлять экран новыми изображениями. Это означает, что приложение будет запрашиваться для создания кадров в более регулярные интервалы, потенциально тратя меньше времени на кадры, которые вероятно будут пропущены.

Для приложений с высокой нагрузкой, установка подходящей целевой частоты кадров может улучшить стабильность рендеринга приложения и снизить задержки.

Аналогично, целевая частота кадров может быть использована для включения частоты обновления 120Hz на Oculus Quest 2 для более простых приложений.

ParamTypeDescription
frameratefloat

teleport 

Телепорт VR локомоции.

Смотрите Пример телепорта.

ParamTypeDescription
cam?Камера, не относящаяся к VR для использования вне VR
camRoot?Корень игрока, объект, который будет позиционироваться при телепортации.
eyeLeft?Левый глаз для использования в VR
eyeRight?Правый глаз для использования в VR
floorGroup?Группа столкновений объектов “пола”, на которые можно телепортироваться
handedness?Определение руки для VR курсов, чтобы принимать события триггера только от соответствующего контроллера.
indicatorYOffset?Смещение, применяемое к индикаторному объекту, например, чтобы избежать его пересечения с полом
maxDistance?Максимальное расстояние для направления лучей PhysX
rayCastMode?Режим направления лучей, использование ли PhysX или простые компоненты столкновения
teleportIndicatorMeshObject?Объект, который будет размещен как индикатор того, куда телепортируется игрок.
thumbstickActivationThreshhold?Насколько сильно нужно оттолкнуть джойстик, чтобы отображался индикатор цели телепортации
thumbstickDeactivationThreshhold?Насколько сильно нужно освободить джойстик, чтобы выполнить телепорт

trail 

Динамическая трековая сетка

Этот компонент отслеживает мировую позицию объекта, к которому он добавлен. Через фиксированный интервал мировая позиция сохраняется в качестве начальных и конечных точек сегментов трека.

Трек сужается вдоль своей длины. UV текстурные координаты настроены таким образом, чтобы ось U покрывала ширину трека, а ось V длину трека. Это позволяет определить внешний вид трека, используя текстуру.

ParamTypeDescription
intervalfloatИнтервал времени перед записью новой точки
materialmaterialМатериал, применяемый к сетке трека
resetThresholdfloatМаксимальное дельта время в секундах, при превышении которого трек сбрасывается.
Это предотвращает скачки трека, когда обновления происходят
нерегулярно (например, когда вкладка неактивна).
segmentsintКоличество сегментов в сетке трека
taperboolДолжен ли трек сужаться
widthfloatШирина трека (в мировом пространстве)

two-joint-ik-solver 

Обратная кинематика для двухсуставных цепей (например, коленей или локтей)

ParamTypeDescription
copyTargetRotation?Флаг для копирования вращения из цели в конец
end?Кость, прикрепленная к середине
helper?Помощник для использования при определении оси вращения сустава
middle?Кость, прикрепленная к корню
root?Корневая кость, никогда не движется
target?Цель, к которой должны стремиться соединения

video-texture 

Загружает видео с URL и применяет его как diffuseTexture или flatTexture на указанный материал.

Видео текстуры необходимо обновлять регулярно, когда доступен новый кадр. Этот компонент обрабатывает обнаружение нового кадра и обновляет текстуру, чтобы отображать текущий кадр видео.

Поддерживаются материалы с следующих шейдеров:

  • “Phong Opaque Textured”
  • “Flat Opaque Textured”
  • “Background”
  • “Physical Opaque Textured”
  • “Foliage”

К видео можно получить доступ через this.video:

1  let videoTexture = this.object.getComponent('video-texture');
2  videoTexture.video.play();
3  videoTexture.video.pause();

Смотрите Пример с видео.

ParamTypeDescription
autoplayboolНачинать автоматически воспроизводить видео
loopboolЗациклить видео
materialmaterialМатериал для применения текстуры видео
mutedboolОтключить звук
texturePropertystringИмя свойства текстуры, которое нужно установить
urlstringURL для загрузки видео

vr-mode-active-switch 

Позволяет переключать другие компоненты на объекте в состояние активного/неактивного в зависимости от того, активен ли VR/AR сеанс.

Полезно для скрытия контроллеров до тех пор, пока пользователь не войдет в VR.

ParamTypeDescription
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 не поддерживается (режим первого лица)
ParamTypeDescription
lookAtTarget?Объект, на который смотрит VRM
src?URL к файлу VRM для загрузки

wasd-controls 

Основные движения с помощью клавиш W/A/S/D.

ParamTypeDescription
headObjectobjectОбъект, ориентация которого используется для определения направления вперед
lockYboolФлаг для перемещения объекта только по глобальным плоскостям x и z
speedfloatСкорость движения в м/с.