Verwenden von Leap Motion und Ultraleap – MRTK2

Für die Verwendung dieses Datenanbieters ist ein Leap Motion Controller erforderlich.

Der Leap Motion Data Provider ermöglicht die artikulierte Handnachverfolgung für VR und könnte für schnelles Prototyping im Editor nützlich sein. Der Datenanbieter kann so konfiguriert werden, dass er den Leap Motion Controller verwendet, der an einem Headset montiert oder mit der Vorderseite auf einem Schreibtisch platziert wird.

LeapMotionIntroGif

Dieser Anbieter kann im Editor und auf dem Gerät auf der eigenständigen Plattform verwendet werden. Es kann auch im Editor auf der UWP-Plattform, aber NICHT in einem UWP-Build verwendet werden.

MRTK-Version Unterstützte Versionen von Leap Motion Unity-Modulen
2.6.x 4.5.0, 4.5.1
2.7.0 - 2.7.2 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0
2.7.3 4.5.0, 4.5.1, 4.6.0, 4.7.0, 4.7.1, 4.8.0, 4.9.1 (siehe Hinweis unten)

Hinweis

Unity Module 4.9.1 erfordern den Gemini 5.2-Nachverfolgungsdienst oder höher. Das Unity-Plug-In V4.9.1 wird nur offiziell in Unity 2019 unterstützt. Siehe Versionshinweise für 4.9.1.

Die Unity-Module wurden in V5.0.0 umbenannt.

MRTK-Version Unterstützte Ultraleap Unity-Plug-In-Versionen
2.8.0 5.3.0 (siehe Hinweis unten)

Hinweis

Die Unity-Plug-In-Versionen 5.0.0, 5.1.0 und 5.2.0 werden in keiner MRTK-Version unterstützt. Benutzern wird empfohlen, ein Upgrade auf 5.3.0 durchzuführen. Unity Plug-In 5.3.0 erfordert den Gemini 5.2-Tracking-Dienst oder höher.

Verwenden der Handverfolgung von Leap Motion (von Ultraleap) in MRTK

  1. Importieren von MRTK und den Leap Motion Unity-Modulen / Unity-Plug-In

    • Installieren Sie die neueste Leap Motion Tracking-Software , um den Tracking-Dienst abzurufen, falls er noch nicht installiert ist.
    • Importieren Sie das Paket Microsoft.MixedReality.Toolkit.Foundation in das Unity-Projekt.
    • Herunterladen und Importieren der neuesten Version des Leap Motion Unity Modules/Unity-Plug-Ins in das Projekt
      • Für Unity-Module: Importieren Sie nur das Core-Paket innerhalb des Projekts.
      • Für Unity-Plug-In: Importieren Sie nur das Tracking-Paket innerhalb des Projekts. Derzeit werden nur Unitypackages unterstützt.

    Wichtig

    Unity hat SelectionMode.OnlyUserModifiable nach Unity 2019.4.19 veraltet, was dazu führt, dass der folgende Fehler aus dem Ultraleap Hotkeys.cs-Skript stammt: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): Fehler CS0619: "SelectionMode.OnlyUserModifiable" ist veraltet: "OnlyUserModifiable" ist veraltet. Verwenden Sie stattdessen "Editable". (UnityUpgradeable) –> Bearbeitbar".

    Um die Probleme zu beheben, ändern Sie selectionMode.OnlyUserModifiable in SelectionMode.Editable im Skript Hotkeys.cs in Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Integrieren der Leap Motion Unity Module /Unity-Plug-Ins in MRTK

    • Nachdem sich das Unity-Module/Unity-Plug-In im Projekt befinden, navigieren Sie zu Mixed Reality>Toolkit-Hilfsprogramme>>Leap Motion>Integrieren von Leap Motion Unity Modules.

    Hinweis

    Durch die Integration der Unity-Module in MRTK werden dem Projekt 10 Assemblydefinitionen hinzugefügt und Verweise auf die Microsoft.MixedReality.Toolkit.Providers.LeapMotion-Assemblydefinition hinzugefügt. Vergewissern Sie sich, dass Visual Studio geschlossen ist.

    LeapMotionIntegration

  3. Hinzufügen des Leap Motion-Datenanbieters

    • Erstellen einer neuen Unity-Szene
    • Fügen Sie MRTK zur Szene hinzu, indem Sie zu Mixed Reality Toolkit>Zu Szene hinzufügen und Konfigurieren navigieren.
    • Wählen Sie das MixedRealityToolkit-Spielobjekt in der Hierarchie aus, und wählen Sie Kopieren und Anpassen aus, um das Standardmäßige Mixed Reality-Profil zu klonen.

    LeapMotionProfileClone

    • Wählen Sie das Eingabekonfigurationsprofil aus.

    Eingabekonfigurationsprofil 1

    • Wählen Sie im Eingabesystemprofil klonen aus, um die Änderung zu aktivieren.

    LeapMotionInputProfileClone

    • Öffnen Sie den Abschnitt Eingabedatenanbieter , wählen Sie oben Datenanbieter hinzufügen aus. Am Ende der Liste wird ein neuer Datenanbieter hinzugefügt. Öffnen Sie den neuen Datenanbieter, und legen Sie den Typ auf Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager fest.

    Leap Add Data Provider

    • Wählen Sie Klonen aus, um die Standardeinstellungen für Leap Motion zu ändern.

    LeapDataProviderPreClone

    • Der Leap Motion Data Provider enthält die LeapControllerOrientation Eigenschaft, die den Speicherort des Leap Motion Controller darstellt. LeapControllerOrientation.Headset gibt an, dass der Controller an einem Headset eingebunden ist. LeapControllerOrientation.Desk gibt an, dass der Controller flach auf dem Schreibtisch platziert ist. Der Standardwert ist auf LeapControllerOrientation.Headsetfestgelegt.

    • Jede Controllerausrichtung enthält Offseteigenschaften:

      • Die Headset-Orientierungsoffseteigenschaften Spiegel die Offseteigenschaften in der LeapXRServiceProvider-Komponente. Die LeapVRDeviceOffsetMode hat drei Optionen: Standard, Manueller Kopfoffset und Transformieren. Wenn der Offsetmodus Standard ist, wird kein Offset auf den Leap Motion Controller angewendet. Der Modus "Manueller Kopfoffset" ermöglicht die Änderung von drei Eigenschaften: LeapVRDeviceOffsetYund LeapVRDeviceOffsetZLeapVRDeviceTiltX. Die Werte der Achsenoffseteigenschaft werden dann auf die Standardplatzierung des Controllers angewendet. Der Offsetmodus Transform enthält die LeapVRDeviceOrigin Transform-Eigenschaft, die einen neuen Ursprung für den Leap Motion Controller angibt.

      • Die Desk-Ausrichtung enthält die LeapControllerOffset Eigenschaft, die die Ankerposition der Tischsprunghände definiert. Der Offset wird relativ zur Standard Kameraposition berechnet, und der Standardwert ist (0,-0,2, 0,35), um sicherzustellen, dass die Hände vor und in Sicht der Kamera angezeigt werden.

        Hinweis

        Die Offseteigenschaften im Profil werden einmal angewendet, wenn die Anwendung gestartet wird. Um die Werte während der Laufzeit zu ändern, rufen Sie den Leap Motion-Dienstanbieter aus der Leap Motion-Geräte-Manager ab:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance und ExitPinchDistance sind die Entfernungsschwellenwerte für die Erkennung von Gesten beim Drücken/Luft tippen. Die Pinchgeste wird berechnet, indem der Abstand zwischen der Zeigefingerspitze und der Daumenspitze gemessen wird. Um ein On Input Down-Ereignis auszulösen, ist der Standardwert EnterPinchDistance auf 0,02 festgelegt. Um ein On Input Up-Ereignis auszulösen (indem die Pinch beendet wird), beträgt der Standardabstand zwischen der Zeigefingerspitze und der Daumenspitze 0,05.

    LeapControllerOrientation: Headset (Standard)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:Schreibtisch

    LeapDeskGif

    LeapDeskInspector

  4. Testen des Leap Motion-Datenanbieters

    • Nachdem Leap Motion Data Provider dem Eingabesystemprofil hinzugefügt wurde, drücken Sie die Wiedergabe, bewegen Sie Ihre Hand vor den Leap Motion Controller, und Sie sollten die gemeinsame Darstellung der Hand sehen.
  5. Erstellen Ihres Projekts

Handgelenke bekommen

Das Herstellen von Gelenken mit dem Leap Motion Data Provider ist identisch mit dem Handgelenkabruf für eine MRTK Gelenkhand. Weitere Informationen finden Sie unter Handnachverfolgung.

Erstellen Sie mit MRTK in einer Unity-Szene und dem Leap Motion Data Provider als Eingabedatenanbieter im Eingabesystemprofil ein leeres Spielobjekt, und fügen Sie das folgende Beispielskript an.

Dieses Skript ist ein einfaches Beispiel für das Abrufen der Pose des Handgelenks in einer Leap Motion Hand. Eine Kugel folgt der linken Leap-Hand, während ein Würfel der rechten Leap-Hand folgt.

using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.Utilities;
using System.Collections.Generic;
using UnityEngine;

public class LeapHandJoints : MonoBehaviour, IMixedRealityHandJointHandler
{
    private GameObject leftHandSphere;
    private GameObject rightHandCube;

    private void Start()
    {
        // Register the HandJointHandler as a global listener
        CoreServices.InputSystem.RegisterHandler<IMixedRealityHandJointHandler>(this);

        // Create a sphere to follow the left hand palm position
        leftHandSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        leftHandSphere.transform.localScale = Vector3.one * 0.03f;

        // Create a cube to follow the right hand palm position
        rightHandCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        rightHandCube.transform.localScale = Vector3.one * 0.03f;
    }

    public void OnHandJointsUpdated(InputEventData<IDictionary<TrackedHandJoint, MixedRealityPose>> eventData)
    {
        if (eventData.Handedness == Handedness.Left)
        {
            Vector3 leftHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
            leftHandSphere.transform.position = leftHandPalmPosition;
        }

        if (eventData.Handedness == Handedness.Right)
        {
            Vector3 rightHandPalmPosition = eventData.InputData[TrackedHandJoint.Palm].Position;
            rightHandCube.transform.position = rightHandPalmPosition;
        }
    }
}

Workflowtipp des Unity-Editors

Für die Verwendung des Leap Motion-Datenanbieters ist kein VR-Headset erforderlich. Änderungen an einer MRTK-App können im Editor mit den Leap-Händen ohne Headset getestet werden.

Die Leap Motion Hands werden im Editor ohne angeschlossenes VR-Headset angezeigt. Wenn auf LeapControllerOrientationHeadset festgelegt ist, muss der Leap Motion-Controller mit der Kamera nach vorne gehalten werden.

Hinweis

Wenn die Kamera mit WASD-Tasten im Editor bewegt wird und headset LeapControllerOrientationist, folgen die Hände nicht der Kamera. Die Hände folgen nur der Kamerabewegung, wenn ein VR-Headset angeschlossen ist, während das LeapControllerOrientationHeadset eingestellt ist. Die Leap-Zeiger folgen der Kamerabewegung im Editor, wenn die LeapControllerOrientation auf Desk festgelegt ist.

Entfernen von Leap Motion aus dem Projekt

  1. Navigieren Sie zum Mixed Reality Toolkit>Leap Motion>Separate Leap Motion Unity Module
    • Unity-Aktualisierung als Verweise in der Datei Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef werden in diesem Schritt geändert
  2. Unity schließen
  3. Schließen Sie Visual Studio, wenn es geöffnet ist.
  4. Öffnen Sie Explorer, und navigieren Sie zum Stammverzeichnis des MRTK Unity-Projekts.
    • Löschen des UnityProjectName/Library-Verzeichnisses
    • Löschen des Verzeichnisses UnityProjectName/Assets/Plugins/LeapMotion
    • Löschen Sie die Datei UnityProjectName/Assets/Plugins/LeapMotion.meta .
  5. Unity erneut öffnen

In Unity 2018.4 können Sie feststellen, dass nach dem Löschen der Bibliothek und der Leap Motion Core-Ressourcen weiterhin Fehler in der Konsole verbleiben. Wenn Fehler nach dem erneuten Öffnen protokolliert werden, starten Sie Unity erneut.

Häufige Fehler

Leap Motion ist nicht in MRTK integriert

So testen Sie, ob die Leap Motion Unity-Module in MRTK integriert sind:

  • Navigieren Sie zu Mixed Reality Toolkit-Hilfsprogramme >> Leap Motion > Check Integrationsstatus
    • Dadurch wird ein Popupfenster mit einer Meldung angezeigt, ob die Leap Motion Unity-Module in MRTK integriert sind oder nicht.
  • Wenn die Meldung besagt, dass die Ressourcen nicht integriert wurden:
    • Stellen Sie sicher, dass sich die Leap Motion Unity-Module im Projekt befinden.
    • Stellen Sie sicher, dass die hinzugefügte Version unterstützt wird. Informationen zu unterstützten Versionen finden Sie in der Tabelle oben auf der Seite.
    • Testen Mixed Reality Toolkit-Hilfsprogramme >> Leap Motion > Integrate Leap Motion Unity Modules

Fehler beim Kopieren der Multiplayer-HLAPI-Assembly

Beim Import von Leap Motion Unity Core Assets wird möglicherweise dieser Fehler protokolliert:

Copying assembly from 'Temp/com.unity.multiplayer-hlapi.Runtime.dll' to 'Library/ScriptAssemblies/com.unity.multiplayer-hlapi.Runtime.dll' failed

Lösung

  • Eine kurzfristige Lösung besteht darin, Unity neu zu starten. Weitere Informationen finden Sie unter Problem 7761 .

Beispielszene für Sprungbewegung

Die Beispielszene verwendet das DefaultLeapMotionConfiguration-Profil und bestimmt, ob das Unity-Projekt ordnungsgemäß für die Verwendung des Leap Motion-Datenanbieters konfiguriert wurde.

Die Beispielszene ist im Paket Microsoft.MixedReality.Toolkit.Examples im Verzeichnis MRTK/Examples/Demos/HandTracking/ enthalten.

Weitere Informationen