JavaScript-Komponenten
8thwall-camera
8thwall-Kamerakomponente.
Veraltet: Verwende stattdessen die Komponenten in https://github.com/WonderlandEngine/wonderland-ar-tracking.
Param | Type | Beschreibung |
---|---|---|
deprecated | bool |
anchor
Setzt die Position des Objekts auf die Position eines XRAnchor.
Erstelle Anker mithilfe der Anchor.create()
-statischen Funktion.
Beispiel zur Verwendung mit einem Cursor:
Param | Type | Beschreibung |
---|---|---|
persist | bool | |
uuid | string | Eindeutige Kennung zum Laden eines persistenten Ankers oder leer/null, wenn unbekannt |
audio-listener
Repräsentiert eine Wonderland-Audio-Listener-Komponente. Aktualisiert die Position und Ausrichtung einer WebAudio-Listener-Instanz.
Hinweis: Es sollte jeweils nur ein Listener aktiv sein.
audio-source
Repräsentiert eine Audioquelle in der Wonderland Engine, die das Abspielen von Audiodateien ermöglicht.
cursor
3D-Cursor für Desktop/Mobilgeräte/VR.
Implementiert einen Ray-Casting-Cursor in die Szene. Um auf Klicken/Hover/Unhover/Cursor runter/Cursor hoch/bewegen zu reagieren, verwende einen cursor-target.
Für VR wird der Strahl in Richtung von this.object.getForward() geworfen. Für Desktop und Mobilgeräte wird der Forward-Vektor invers-projiziert, um zu berücksichtigen, wo auf dem Bildschirm der Nutzer geklickt hat.
.globalTarget
kann verwendet werden, um Callbacks für alle Objekte aufzurufen, auch für solche, die
keinen Cursor-Target angeschlossen haben, aber zur Kollisionsgruppe passen.
.hitTestTarget
kann verwendet werden, um Callbacks für WebXR-Hit-Test-Ergebnisse aufzurufen,
Siehe Animation Example.
Param | Type | Beschreibung |
---|---|---|
collisionGroup | int | Kollisionsgruppe für den Ray-Cast. Nur Objekte in dieser Gruppe werden von diesem Cursor betroffen. |
cursorObject | object | (optional) Objekt, das den Trefferort des Cursors visualisiert. |
cursorRayObject | object | (optional) Objekt, das den Strahl des Cursors visualisiert. |
cursorRayScalingAxis | enum | Achse, entlang der das cursorRayObject skaliert werden soll. |
handedness | enum | Händigkeit für VR-Cursor, um Triggerereignisse nur vom jeweiligen Controller zu akzeptieren. |
maxDistance | float | Maximale Entfernung für den Ray-Cast des Cursors. |
rayCastMode | enum | Modus für Raycasting, ob PhysX oder einfache Kollisionskomponenten verwendet werden sollen |
styleCursor | bool | Ob der CSS-Stil des Mauszeigers auf Desktop gesetzt werden soll |
useWebXRHitTest | bool | WebXR-Hit-Test verwenden, wenn verfügbar. |
Fügt der cursorObject-Komponente eine hitTestLocation-Komponente hinzu, die vom Cursor verwendet wird, um Ereignisse an das hitTestTarget mit HitTestResult zu senden.|
cursor-target
Klick/Hover/Move/Buttons-Ziel für cursor.
Um Code auszulösen, wenn geklickt, gehovert, unhovered, der Cursor bewegt, die Cursortaste gedrückt oder die Cursortaste losgelassen wird, verwende .addClickFunction(f)
, .addHoverFunction(f)
, .addUnHoverFunction(f)
, .addMoveFunction(f)
, .addDownFunction(f)
und .addUpFunction(f)
jeweils mit einer beliebigen function f() {}
.
Um Mitglieder auf einer anderen Komponente aufzurufen, kannst du einen Cursor-Target so einrichten:
Funktionen:
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);
Anforderungen:
- Ein
collision
-Komponente muss am gleichen Objekt angebracht sein.
Siehe Animation Example.
debug-object
Gibt begrenzte Debug-Informationen über das Objekt aus.
Die Informationen bestehen aus: dem Namen dieses Objekts, dem Namen eines Objektparameters, der weltlichen Translation des Objekts, der weltlichen Transformation und der lokalen Transformation.
Hauptsächlich von Engine-Entwicklern für Debug-Zwecke oder als Beispielcode verwendet.
Param | Type | Beschreibung |
---|---|---|
obj | object | Ein zweites Objekt, dessen Name ausgegeben werden soll |
device-orientation-look
Ruft die Geräteausrichtung von einem Mobilgerät ab und setzt die Ausrichtung des Objekts entsprechend.
Nützlich für Magic-Window-Erfahrungen.
finger-cursor
0.8.5+Ermöglicht die Interaktion mit Cursor-Zielen durch Kollision überlappungen, z.B. an der Fingerspitze einer verfolgten Hand.
Anforderungen:
- Eine Kollision-Komponente (normalerweise eine Kugel mit
0.05
Radius) am selben Objekt
fixed-foveation
Appliziert fixed foveation, sobald eine WebXR-Sitzung gestartet wird.
Fixed Foveation reduziert die Schattierungskosten an der Peripherie, indem am Rand der Nutzeransicht in niedrigerer Auflösung gerendert wird.
Param | Type | Beschreibung |
---|---|---|
fixedFoveation | float | Menge der Anwendung von 0 (keine) bis 1 (volle) |
hand-tracking
Einfaches Hand-Tracking durch die WebXR-Geräte-API “Hand Input” API.
Ermöglicht die Darstellung von Händen entweder als Kugelgelenke oder skinn h fähiges Mesh.
Um auf Greifbewegungen zu reagieren, verwende this.isGrabbing()
. Für andere Gesten, siehe this.joints
- ein Array von Object3D und nutze die Gelenkungsindizes, die in der WebXR Hand Input-Spezifikation aufgeführt sind.
Es ist oft gewünscht, entweder Hand-Tracking oder Controller zu verwenden, nicht beides gleichzeitig.
Diese Komponente bietet deactivateChildrenWithoutPose
, um die Hand-Tracking-Visualisierung zu verbergen, wenn keine Pose verfügbar ist, und controllerToDeactivate
, um ein anderes Objekt zu deaktivieren, sobald eine Hand-Tracking-Pose verfügbar ist.
Außerhalb von XR-Sitzungen werden Tracking oder Controller weder aktiviert noch deaktiviert,
um eine gute Zusammenarbeit mit der vr-mode-active-switch-Komponente zu gewährleisten.
Anforderungen:
- Um Hand-Tracking zu verwenden, aktiviere “Gelenkverfolgung” in
chrome://flags
auf dem Oculus Browser für Oculus Quest/Oculus Quest 2.
Siehe Hand Tracking Example.
Param | Type | Beschreibung |
---|---|---|
controllerToDeactivate | object | Controller-Objekte, die mit Kindern aktiviert werden sollen, wenn keine Pose verfügbar ist |
deactivateChildrenWithoutPose | bool | Kinder deaktivieren, wenn keine Pose verfolgt wurde |
handSkin | skin | (optional) Skin, die auf verfolgte Gelenkposen angewendet werden soll. Wenn nicht vorhanden, |
werden Gelenkkugeln zur Darstellung verwendet. | ||
handedness | enum | Händigkeit, die bestimmt, ob Tracking-Eingaben von der rechten oder linken Hand empfangen werden sollen |
jointMaterial | material | Material, das für die Darstellung verwendet werden soll. Wird entweder auf das erzeugte skinn mesh oder die Gelenkkugeln angewendet. |
jointMesh | mesh | (optional) Mesh, das zur Visualisierung von Gelenken verwendet werden soll |
hit-test-location
Richtet einen WebXR-Device-API “Hit Test” ein und platziert das Objekt an der Trefferposition.
Anforderungen:
- Gib
'hit-test'
in den benötigten oder optionalen Features des AR-Buttons in deiner HTML-Datei an. Siehe Wastepaperbin AR als Beispiel.
Param | Type | Beschreibung |
---|---|---|
scaleObject | bool | Zur Aufrechterhaltung der Abwärtskompatibilität: Ob das Objekt auf 0 skalieren und zurück skaliert werden soll. |
Veraltet: Verwende lieber onHitLost und onHitFound.|
image-texture
Lädt ein Bild von einer URL herunter und wendet es als diffuseTexture
oder flatTexture
auf eine angeschlossene Mesh-Komponente an.
Materialien aus den folgenden Shadern werden unterstützt:
- “Phong Opaque Textured”
- “Flat Opaque Textured”
- “Background”
- “Physical Opaque Textured”
- “Foliage”
Param | Type | Beschreibung |
---|---|---|
material | material | Material, auf das die Videotextur angewendet werden soll |
textureProperty | string | Name der Textureigenschaft, die gesetzt werden soll |
url | string | URL, von der das Bild heruntergeladen werden soll |
input-profile
Lädt und mappt dynamisch Eingabeprofile für XR-Controller.
Param | Type | Beschreibung |
---|---|---|
addVrModeSwitch | bool | Wenn true, wird eine VR-Modus-Switch-Komponente zum geladenen Controller-Modell hinzugefügt. |
customBasePath | string | Ein optionaler Ordnerpfad zum Laden benutzerdefinierter XR-Eingabeprofile. |
defaultBasePath | string | Der Basispfad, in dem XR-Eingabeprofile gespeichert werden. |
defaultController | object | Das Standard-3D-Controller-Modell, das verwendet wird, wenn ein benutzerdefiniertes Modell nicht geladen werden kann. |
handedness | enum | Der Index, der die Händigkeit des Controllers repräsentiert (0 für links, 1 für rechts). |
mapToDefaultController | bool | Wenn true, wird das Eingabeprofil auf den Standard-Controller gemappt, und kein dynamisches 3D-Modell des Controllers wird geladen. |
trackedHand | object | Das Objekt, welches die HandTracking-Komponente hinzugefügt hat. |
mouse-look
Steuert die Kameraausrichtung durch Mausbewegung.
Effizient implementiert, um die Objektorientierung nur zu beeinflussen, wenn die Maus bewegt wird.
Param | Type | Beschreibung |
---|---|---|
mouseButtonIndex | int | Wenn “moveOnClick” aktiviert ist, Maus-Taste, die |
zum Steuern der Ansicht gehalten werden soll | ||
pointerLockOnClick | bool | Aktiviert Zeigersperre beim “mousedown”-Ereignis auf dem Canvas |
requireMouseDown | bool | Erfordert, dass eine Maustaste gedrückt wird, um die Ansicht zu steuern. |
Andernfalls wird die Ansicht immer der Mausbewegung folgen | ||
sensitity | float | Empfindlichkeit der Mausbewegung |
orbital-camera
Die OrbitalCamera-Komponente ermöglicht es dem Benutzer, um einen Zielpunkt zu drehen, der die Position des Objekts selbst ist. Sie dreht sich in der angegebenen Entfernung.
Bemerkungen: Die Komponente funktioniert mittels Maus oder Touch. Daher funktioniert sie nicht in VR.
Param | Type | Beschreibung |
---|---|---|
damping | float | |
maxElevation | float | |
maxZoom | float | |
minElevation | float | |
minZoom | float | |
mouseButtonIndex | int | |
radial | float | |
xSensitivity | float | |
ySensitivity | float | |
zoomSensitivity | float |
plane-detection
Erzeugt Meshes und Kollisionen für XRPlanes unter Verwendung von WebXR Device API - Plane Detection.
Param | Type | Beschreibung |
---|---|---|
collisionMask | int | Kollisionsmaske, die neu erstellten Kollisionskomponenten zugewiesen wird, oder ein negativer Wert, wenn |
Kollisionskomponenten nicht erstellt werden sollen. | ||
planeMaterial | material | Material, das den erstellten Plan-Meshes zugewiesen wird oder null , wenn keine Meshes erstellt werden sollen. |
player-height
Setzt die Spielerhöhe für einen Y-Offset über dem Boden für ’local’ und ‘viewer’ Referenzräume.
Param | Type | Beschreibung |
---|---|---|
height | float |
target-framerate
Setzt die Zielbildrate
Aktualisiert die Zielbildrate
auf die nächstgelegene unterstützte Zielbildrate
zur angegebenen framerate
.
Die Zielbildrate wird für den VR-Compositor des Geräts als Indikator verwendet, wie oft der Bildschirm mit neuen Bildern aktualisiert werden soll. Dies bedeutet, dass die App in regelmäßigeren Abständen aufgefordert wird, Frames zu produzieren und möglicherweise weniger Zeit für Frames verwendet, die wahrscheinlich verworfen werden.
Bei Apps mit hoher Belastung kann das Festlegen einer gut passenden Zielbildrate die Rendering-Stabilität der App verbessern und Ruckler reduzieren.
Ebenso kann die Zielbildrate verwendet werden, um auf Oculus Quest 2 bei einfacheren Apps 120Hz Wiederholraten zu ermöglichen.
Param | Type | Beschreibung |
---|---|---|
framerate | float |
teleport
Teleport VR Fortbewegung.
Siehe Teleport Example.
Param | Type | Beschreibung |
---|---|---|
cam | ? | Nicht-VR-Kamera für die Verwendung außerhalb von VR |
camRoot | ? | Wurzel des Spielers, das Objekt, das bei der Teleportation positioniert wird. |
eyeLeft | ? | Linkes Auge für die Verwendung in VR |
eyeRight | ? | Rechtes Auge für die Verwendung in VR |
floorGroup | ? | Kollisionsgruppe gültiger “Boden”-Objekte, auf die teleportiert werden kann |
handedness | ? | Händigkeit für VR-Cursor, um Trigger-Ereignisse nur vom jeweiligen Controller zu akzeptieren. |
indicatorYOffset | ? | Offset, der auf das Indikatorobjekt angewendet wird, z.B. um zu vermeiden, dass es mit dem Boden Z-fightet |
maxDistance | ? | Maximalentfernung für PhysX Raycast |
rayCastMode | ? | Modus für Raycasting, ob PhysX oder einfache Kollisionskomponenten verwendet werden sollen |
teleportIndicatorMeshObject | ? | Objekt, das als Anzeige für die Position platziert wird, zu der sich der Spieler teleportieren wird. |
thumbstickActivationThreshhold | ? | Wie weit der Daumenstick geschoben werden muss, damit der Teleportationszielanzeiger erscheint |
thumbstickDeactivationThreshhold | ? | Wie weit der Daumenstick losgelassen werden muss, um die Teleportation auszuführen |
trail
Dynamischer, mesh-basierter Pfad
Diese Komponente verfolgt die Weltposition des Objekts, zu dem sie hinzugefügt wurde. In festen Intervallen wird die Weltposition als Start- und Endpunkte der Pfadsegmente gespeichert.
Der Pfad verjüngt sich entlang seiner Länge. Die UV-Texturkoordinaten sind so eingerichtet, dass die U-Achse die Breite des Pfades und die V-Achse die Länge des Pfades abdeckt. Dies ermöglicht die Definition des Erscheinungsbildes des Pfades mithilfe einer Textur.
Param | Type | Beschreibung |
---|---|---|
interval | float | Das Zeitintervall vor der Aufzeichnung eines neuen Punktes |
material | material | Das Material, das auf das Mesh des Pfades angewendet wird |
resetThreshold | float | Die maximale Delta-Zeit in Sekunden, über der der Pfad zurückgesetzt wird. |
Dies verhindert, dass der Pfad umher springt, wenn Updates unregelmäßig eintreffen | ||
(z.B. wenn der Tab nicht fokussiert ist). | ||
segments | int | Die Anzahl der Segmente im Mesh des Pfades |
taper | bool | Ob der Pfad sich verjüngen soll oder nicht |
width | float | Die Breite des Pfades (in Weltkoordinaten) |
two-joint-ik-solver
Inverse Kinematik für zwei Gelenkketten (z.B. Knie oder Ellbogen)
Param | Type | Beschreibung |
---|---|---|
copyTargetRotation | ? | Flag für das Kopieren der Rotation vom Ziel zum Ende |
end | ? | Knochen, der am Mittelgelenk befestigt ist |
helper | ? | Hilfsobjekt, das zum Bestimmen der Rotationsachse des Gelenks verwendet wird |
middle | ? | Knochen, der an der Wurzel befestigt ist |
root | ? | Wurzelknochen, bewegt sich nie |
target | ? | Ziel, das die Gelenke erreichen sollen |
video-texture
Läd ein Video von einer URL herunter und wendet es als diffuseTexture
oder flatTexture
auf ein gegebenes Material an.
Videotexturen müssen regelmäßig aktualisiert werden, wann immer ein neuer Frame verfügbar ist. Diese Komponente erkennt das Erreichen eines neuen Frames und aktualisiert die Textur, um den aktuellen Frame des Videos widerzuspiegeln.
Materialien aus den folgenden Shadern werden unterstützt:
- “Phong Opaque Textured”
- “Flat Opaque Textured”
- “Background”
- “Physical Opaque Textured”
- “Foliage”
Das Video kann über this.video
erreicht werden:
Siehe Video Example.
Param | Type | Beschreibung |
---|---|---|
autoplay | bool | Ob das Video automatisch gestartet werden soll |
loop | bool | Ob das Video in einer Schleife abgespielt werden soll |
material | material | Material, auf das die Videotextur angewendet werden soll |
muted | bool | Ob der Ton stummgeschaltet werden soll |
textureProperty | string | Name der Textureigenschaft, die gesetzt werden soll |
url | string | URL, von der das Video heruntergeladen werden soll |
vr-mode-active-switch
Ermöglicht das Umschalten aller anderen Komponenten eines Objekts auf aktiv/inaktiv, abhängig davon, ob eine VR/AR-Sitzung aktiv ist.
Nützlich, um Controller beispielsweise zu verstecken, bis der Benutzer VR betritt.
Param | Type | Beschreibung |
---|---|---|
activateComponents | ? | Wann die Komponenten aktiv sein sollten: In VR oder wenn nicht in VR |
affectChildren | ? | Ob die Komponenten von Kindobjekten betroffen sein sollen |
vrm
Komponente zum Laden und Handhaben von VRM 1.0 Modellen.
Das Posing des Modells sollte ausschließlich durch Drehen der Knochen erfolgen. Diese können
über die .bones
-Eigenschaft angesprochen werden und folgen der VRM-Knochenbenennung. Beachte, dass nicht
alle VRM-Modelle über alle möglichen Knochen verfügen. Die Grundpose (T-Pose) wird in
der .restPose
-Eigenschaft erfasst. Ein Zurücksetzen eines Knochens auf seine Grundpose kann folgendermaßen erfolgen:
1vrmComponent.bones[vrmBoneName].rotationLocal = vrmComponent.restPose[vrmBoneName];
Die Bewegung des Modells durch die Welt sollte durch Bewegen des Objekts, an das diese Komponente angeschlossen ist, erfolgen. Mit anderen Worten, indem man die Wurzel des VRM-Modells bewegt. Die Knochen und alle abhängigen Objekte sollten nicht zur Bewegung des VRM-Modells verwendet werden.
Die Haupterweiterung VRMC_vrm
sowie die Erweiterungen VRMC_springBone
und VRMC_node_constraint
werden unterstützt.
Einschränkungen:
- Keine Unterstützung für
VRMC_material_mtoon
- Ausdrücke werden nicht unterstützt
- Ausdrücksbasiertes LookAt wird nicht unterstützt
- Mesh-Annotation-Modus
auto
wird nicht unterstützt (Erste-Person-Modus)
Param | Type | Beschreibung |
---|---|---|
lookAtTarget | ? | Objekt, auf das das VRM-Modell schaut |
src | ? | URL zu einer VRM-Datei, die geladen werden soll |
wasd-controls
Grundlegende Bewegung mit W/A/S/D-Tasten.
Param | Type | Beschreibung |
---|---|---|
headObject | object | Objekt, dessen Ausrichtung verwendet wird, um die Vorwärtsrichtung zu bestimmen |
lockY | bool | Flag, um das Objekt nur auf den globalen x- und z-Ebenen zu bewegen |
speed | float | Bewegungsgeschwindigkeit in m/s. |