Entwickeln

Einrichtung von Hand-Tracking

Aktualisiert: 19.12.2024
Als empfohlene Methode für die Integration von Hand-Tracking für Unity-Entwickler*innen gilt die Verwendung des Interaction SDK, das standardisierte Interaktionen und Gesten bereitstellt. Die Erstellung eigener Interaktionen ohne das SDK kann eine große Herausforderung darstellen und kann eine Genehmigung im Store erschweren.
Apps rendern Hände auf dieselbe Weise wie andere Eingabegeräte. Richte zunächst die Kamera ein. Wähle Hände als Eingabegerät aus und füge das Hände-Prefab hinzu, um Hände in der Standardform hinzuzufügen. In den folgenden Abschnitten wird das einfache Setup beschrieben:
Wenn du noch keine Erfahrung mit der Unity-Entwicklung auf der Quest hast, lies dir unseren Leitfaden „Hello World“ durch, um deine erste VR-App zu erstellen.

Kamera einrichten

  1. Erstelle eine neue Szene oder öffne eine vorhandene aus deinem Projekt.
  2. Suche auf dem Tab Projekt nach OVRCameraRig und ziehe es in die Szene. Überspringe diesen Schritt, wenn OVRCameraRig bereits in der Szene vorhanden ist.
  3. Wähle auf dem Tab Hierarchie die Option OVRCameraRig, um den Tab Inspector zu öffnen.
  4. Navigiere auf dem Tab Inspector zu OVR Manager > Tracking und wähle dann in der Liste Tracking Origin Type die Option Floor Level.
  5. Klicke auf dem Tab Hierarchie mit der rechten Maustaste auf Main Camera, um das GameObject zu löschen, sofern noch nicht geschehen.

Hände als Eingabe auswählen

  1. Wähle auf dem Tab Hierarchie die Option OVRCameraRig, um den Tab Inspector zu öffnen. Überspringe diesen Schritt, wenn du nach dem Abschnitt „Kamera einrichten“ oben fortfährst.
  2. Navigiere auf dem Tab Inspector zu OVR Manager > Quest Features und wähle dann in der Liste Hand Tracking Support die Option Controllers and Hands. Wähle die Option Hands Only, damit als Eingabemethode Hände ohne Controller verwendet werden.
    Wenn du Controller und Hände oder nur Hände auswählst, fügt Meta Quest automatisch<uses-permission android:name="com.oculus.permission.HAND_TRACKING" />- und <uses-feature android:name="oculus.software.handtracking" android:required="false" />-Elemente in der Datei „AndroidManifest.xml“ hinzu. Wenn die App Controller und Hände unterstützt, wird android:required auf false, um anzugeben, dass die App Hände bevorzugt, falls vorhanden. Wenn keine Hände vorhanden sind, kann die App jedoch weiterhin mit Controllern genutzt werden. Wenn die App nur Hände unterstützt, ist android:required auf true gesetzt. Oculus fügt diese beiden Tags automatisch hinzu und die Android Manifest-Datei muss nicht manuell aktualisiert werden.
  3. Belasse die Auswahl in der Liste Hand Tracking Version als Default, damit die aktuelle Version von Hand-Tracking verwendet wird (Hands 1.0 ist mittlerweile veraltet. Durch Auswahl von 1.0 oder 2.0 wird die App gezwungen, Hands 2.0 zu verwenden, was möglicherweise automatische Upgrades auf künftige neue Hauptversionen verhindert.).

Hand-Prefab hinzufügen

  1. Erweitere auf dem Tab Hierarchy die Option OVRCameraRig > TrackingSpace, um Hand-Prefabs unter den linken und rechten Handankern hinzuzufügen.
  2. Suche auf dem Tab Project nach OVRHandPrefab und ziehe es dann unter jeden Handanker auf dem Tab Hierarchy.
  3. Wähle auf dem Tab Hierarchy unter RightHandAnchor die Option OVRHandPrefab und ändere dann auf dem Tab Inspector unter OVR Hand, OVR Skeleton und OVR Mesh den Handtyp in rechte Hand. Für das Linke-Hand-Prefab ist keine Handlung erforderlich, da der Handtyp automatisch auf die linke Hand eingestellt wird.
  4. Wähle auf dem Tab Hierarchy beide OVR-Hand-Prefabs aus und vergewissere dich dann auf dem Tab Inspector, dass die Kontrollkästchen OVR Skeleton, OVR Mesh und OVR Mesh Renderer aktiviert sind, um Hände in der App zu rendern.
Zu diesem Zeitpunkt kann die App Hände als Eingabegerät rendern. Zum Testen von Händen setze das Headset auf, navigiere zu Einstellungen > Bewegungs-Tracking und aktiviere Hand- und Body-Tracking. Belasse Automatischer Wechsel zwischen Hand-Tracking und Controller ausgewählt, damit du deine Hände verwenden kannst, wenn du keine Controller mehr nutzt. Erstelle die App über Unity und führe sie im Headset aus. Nachdem du die App im Headset gestartet hast, lege die Controller nieder und strecke deine Hände aus, die jetzt als Eingabegeräte in der App fungieren.

Wurzelhaltung und Wurzelgröße aktualisieren

Zum Generieren und Rendern des animierten 3D-Handmodells kombiniert OVR Mesh Renderer Daten, die von OVR Skeleton und OVR Mesh zurückgegeben werden. OVR Skeleton gibt Daten zu Fesselhaltung, Knochenhierarchie und kollidierbaren Kapselobjekten zurück. OVR Mesh lädt ein bestimmtes 3D-Asset aus der Oculus-Runtime und stellt es als Unity Engine-Mesh dar. Wir haben die empfohlenen Einstellungen vorkonfiguriert und ausführlich erläutert.
  1. Erweitere auf dem Tab Hierarchy die Option OVRCameraRig > TrackingSpace und wähle dann unter LeftHandAnchor das OVRHandPrefab-Prefab aus.
  2. Aktiviere auf dem Tab Inspector unter OVR Skeleton das Kontrollkästchen Update Root Pose.
    Wenn das OVRHandPrefab den Linke- und Rechte-Hand-Ankern unter OVRCameraRig übergeordnet wird, belasse das Kontrollkästchen Update Root Pose unausgewählt, sodass die Handanker die Hände im Tracking-Bereich richtig positionieren können. Wenn es unabhängig von OVRCameraRig platziert wird, aktiviere das Kontrollkästchen, damit nicht nur die Finger und Knochen, sondern auch die tatsächliche Wurzel der Hand richtig aktualisiert werden.
  3. Aktiviere auf dem Tab Inspector unter OVR Skeleton das Kontrollkästchen Update Root Scale.
    Dadurch wird anhand einer einheitlichen Skala im Vergleich zum Referenzhandmodell eine Schätzung der Handgröße des*der Nutzer*in erstellt. Standardmäßig entspricht das Referenzhandmodell einer Größe von 100 % (1.0). Durch Aktivieren der Skalierung wird die Größe des Handmodells je nach tatsächlicher Handgröße des*der Nutzer*in nach oben oder unten skaliert. Die Handgröße kann jederzeit geändert werden. Wir empfehlen, die Hand zum Rendern und für Interaktionen zur Runtime zu skalieren. Wenn du lieber die Standard-Referenzhandgröße verwenden möchtest, deaktiviere das Kontrollkästchen.
  4. Wiederhole diesen Abschnitt für das OVRHandPrefab-Prefab unter RightHandAnchor.

Eigenschaftskapseln hinzufügen

Eigenschaftskapseln entsprechen dem Volumen der Handknochen, die zum Auslösen von Interaktionen mit physischen Gegenständen und zum Generieren von Kollisionsevents mit anderen starren Körpern im Eigenschaftssystem verwendet werden.
  1. Erweitere auf dem Tab Hierarchy die Option OVRCameraRig > TrackingSpace und wähle dann das OVRHand-Prefab aus, das du für Eigenschaftsinteraktionen verwenden möchtest.
  2. Aktiviere auf dem Tab Inspector unter OVR Skeleton das Kontrollkästchen Enable Physics Capsules.
  3. Wiederhole die Schritte 1 und 2 für das andere Hand-Prefab.

Anzeige anpassen

Standardhandmodelle verfügen über Skinning. Ein Skinned Mesh Renderer stellt Eigenschaften bereit, die definieren, wie das Modell in der Szene gerendert wird. Vergewissere dich, dass das Kontrollkästchen Skinned Mesh Renderer aktiviert ist. Du kannst drei allgemeine Kategorien definieren, um das Handmodell anzupassen:
  • Materials definieren, wie Hände in der App dargestellt werden. Konfiguriere je nach Shader das Material, das zu deinem Content passt. Wähle beispielsweise den Metallic- oder Specular-Workflow, lege den Renderingmodus fest, definiere die Grundfarbe oder passe die Glätte an. Weitere Informationen zu Materialien findest du im Guide Erstellen und Verwenden von Materialien in der Unity-Dokumentation.
  • Lighting gibt an, ob und wie der Mesh Renderer Schatten wirft und empfängt.
  • Probes enthält Eigenschaften, die festlegen, wie der Renderer Licht aus dem Light Probe-System empfängt.
Gehe folgendermaßen vor, um die Skinned Mesh Renderer-Eigenschaften zu definieren:
  1. Erweitere auf dem Tab Hierarchy die Option OVRCameraRig > TrackingSpace und wähle dann das OVRHand-Prefab von einem Handanker aus.
  2. Führe auf dem Tab Inspector folgende Aufgaben aus:
    • Vergewissere dich, dass das Kontrollkästchen Skinned Mesh Renderer aktiviert ist.
    • Gib unter Materials die Anzahl der Materialien ein, die du verwenden möchtest, und ziehe das Material in die Liste der Materialien. Standardmäßig ist die Größe auf 1 festgelegt und das erste Element ist immer „Element 0“.
    • Wähle unter Lighting in der Liste Cast Shadows aus, wie der Renderer Schatten werfen soll, wenn ein geeignetes Licht darauf scheint, und aktiviere dann das Kontrollkästchen Receive Shadows, damit das Mesh Schatten darstellt, die darauf geworfen werden.
    • Wähle unter Probes in der Liste Light Probes aus, wie der Renderer interpolierte Lichtsonden verwenden soll. Standardmäßig verwendet der Renderer eine interpolierte Lichtsonde.
  3. Wiederhole die Schritte 1 und 2 für das andere OVRHand-Prefab.
Wenn du ein angepasstes Mesh verwenden möchtest, weise dein eigenes Skelett zu, dem unser Skelett zugrunde liegt. Weitere Informationen zur Beispielnutzung findest du in der HandTest_Custom-Szene, die die Prefabs OVRCustomHandPrefab_L und OVRCustomHandPrefab_R sowie das Skript OVRCustomSkeleton.cs verwendet.
Um das Rendern von Wireframe-Skeletten zu aktivieren, um Knochen mit Drahtgitterlinien darzustellen und das visuelle Debuggen zu erleichtern, erweitere auf dem Tab Hierarchy die Option OVRCameraRig > TrackingSpace und wähle dann das OVRHand-Prefab von einem Handanker aus. Aktiviere auf dem Tab Inspector das Kontrollkästchen OVR Skeleton Renderer.

Handskelett-Versionen

Ab Version 71 unterstützt das Core SDK einen neuen Handskelett-Typ: das OpenXR-Handskelett. Dieses Skelett entspricht dem OpenXR-Standard für Handskelette, die über andere Knochen und Ausrichtungen verfügen als das zuvor verwendete OVR-Handskelett. Die Umstellung auf dieses neuere Skelett verbessert die Kompatibilität mit verschiedenen Plattformen, da das OpenXR-Skelett als Branchenstandard gilt. Das zuvor verwendete OVR-Handskelett wird jedoch weiterhin unterstützt. Du kannst darauf zugreifen, indem du OVRCameraRig im Tab Hierarchy auswählst und dann im Tab Inspector unter OVR Manager das Dropdown-Feld Hand Skeleton Version auf OVR Hand Skeleton festlegst.
Hand Skeleton Version Selection
Im Dropdown-Feld „Hand Skeleton Version“ in OVRManager kannst du das verwendete Handskelett ändern. Der Unterschied zwischen den Handversionen wird in den Funktionen des Meta Core SDK automatisch berücksichtigt. Wenn du jedoch direkt auf bestimmte Knochen und deren Ausrichtung verweist, kann sich dieses Verhalten zwischen den Handskelett-Versionen ändern.
Die genauen Unterschiede zwischen dem OVR-Handskelett und dem OpenXR-Skelett sind hier aufgeführt.
 OpenXR-HandskelettOVR-Handskelett
Unterarm
Nicht enthalten
Enthalten
Handfläche
Enthalten
Nicht enthalten
Daumen
Mittelhandknochen, Grundglied, Endglied, Spitze
Trapezium, Mittelhandknochen, Grundglied, Endglied, Spitze
Zeigefinger
Mittelhandknochen, Grundglied, Mittelglied, Endglied, Spitze
Grundglied, Mittelglied, Endglied, Spitze
Mittelfinger
Mittelhandknochen, Grundglied, Mittelglied, Endglied, Spitze
Grundglied, Mittelglied, Endglied, Spitze
Ringfinger
Mittelhandknochen, Grundglied, Mittelglied, Endglied, Spitze
Grundglied, Mittelglied, Endglied, Spitze
Kleiner Finger
Mittelhandknochen, Grundglied, Mittelglied, Endglied, Spitze
Mittelhandknochen, Grundglied, Mittelglied, Endglied, Spitze
Gesamt
26 Gelenke
24 Gelenke
Ausrichtung
Gelenke sind für beide Hände z-nach vorn, y-nach oben ausgerichtet
Gelenke sind für die rechte Hand x-nach vorn, y-nach oben ausgerichtet und für die linke Hand gespiegelt