Leap Motion en Ultraleap gebruiken — MRTK2

Een Leap Motion Controller is vereist om deze gegevensprovider te gebruiken.

De Leap Motion-gegevensprovider maakt het mogelijk om de hand te volgen voor VR en kan handig zijn voor snelle prototypen in de editor. De gegevensprovider kan worden geconfigureerd voor het gebruik van de Leap Motion Controller die op een headset is gemonteerd of op een bureau wordt geplaatst.

LeapMotionIntroGif

Deze provider kan worden gebruikt in de editor en op het apparaat op het zelfstandige platform. Het kan ook worden gebruikt in de editor op het UWP-platform, maar NIET in een UWP-build.

MRTK-versie Ondersteunde versies van Leap Motion Unity-modules
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 (zie opmerking hieronder)

Notitie

Unity Modules 4.9.1 vereist de gemini 5.2-traceringsservice of hoger. De Unity-invoegtoepassing V4.9.1 wordt alleen officieel ondersteund op Unity 2019. Zie releaseopmerkingen voor 4.9.1.

De naam van de Unity-modules is gewijzigd in de Unity-invoegtoepassing in V5.0.0.

MRTK-versie Ondersteunde versies van ultraleap Unity-invoegtoepassing
2.8.0 5.3.0 (zie opmerking hieronder)

Notitie

De Unity-invoegtoepassingsversies 5.0.0, 5.1.0 en 5.2.0 worden niet ondersteund in een versie van MRTK. Gebruikers wordt aangeraden een upgrade uit te voeren naar 5.3.0. Unity Plugin 5.3.0 vereist de Gemini 5.2 tracking service of hoger.

Met behulp van Leap Motion (van Ultraleap) handtracering in MRTK

  1. MRTK en de Leap Motion Unity Modules/Unity-invoegtoepassing importeren

    • Installeer de nieuwste Leap Motion Tracking Software om de trackingservice op te halen als deze nog niet is geïnstalleerd
    • Importeer het pakket Microsoft.MixedReality.Toolkit.Foundation in het Unity-project.
    • Download en importeer de nieuwste versie van de Leap Motion Unity Modules/Unity-invoegtoepassing in het project
      • Voor Unity-modules: importeer alleen het Core-pakket binnen het project
      • Voor de Unity-invoegtoepassing: importeer alleen het trackingpakket binnen het project. Op dit moment worden alleen .unitypackages ondersteund.

    Belangrijk

    Unity heeft SelectionMode.OnlyUserModifiable afgeschaft na Unity 2019.4.19, wat resulteert in de volgende fout die afkomstig is van het Ultraleap Hotkeys.cs-script: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): error CS0619: 'SelectionMode.OnlyUserModifiable' is verouderd: 'OnlyUserModifiable' is verouderd. Gebruik in plaats daarvan 'Bewerkbaar'. (UnityUpgradeable) -> Bewerkbaar'.

    U kunt de problemen oplossen door SelectionMode.OnlyUserModifiable te wijzigen in SelectionMode.Editable in het script Hotkeys.cs in Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. De Leap Motion Unity Modules/Unity-invoegtoepassing integreren met MRTK

    • Nadat de Unity Modules/Unity-invoegtoepassing zich in het project bevinden, gaat u naar Mixed Reality>Toolkit>Utilities>Leap Motion Integrate>Leap Motion Unity Modules.

    Notitie

    Als u de Unity-modules integreert met MRTK, worden 10 assemblydefinities toegevoegd aan het project en worden verwijzingen toegevoegd naar de assemblydefinitie Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Zorg ervoor dat Visual Studio is gesloten.

    LeapMotionIntegration

  3. De leap motion-gegevensprovider toevoegen

    • Een nieuwe Unity-scène maken
    • MRTK toevoegen aan de scène door te navigeren naar Mixed Reality Toolkit>Toevoegen aan scène en configureren
    • Selecteer het gameobject MixedRealityToolkit in de hiërarchie en selecteer Kopiëren en aanpassen om het standaard mixed reality-profiel te klonen.

    LeapMotionProfileClone

    • Selecteer het invoerconfiguratieprofiel

    Invoerconfiguratieprofiel 1

    • Selecteer Klonen in het invoersysteemprofiel om wijziging in te schakelen.

    LeapMotionInputProfileClone

    • Open de sectie Invoergegevensproviders , selecteer Gegevensprovider toevoegen bovenaan. Er wordt een nieuwe gegevensprovider toegevoegd aan het einde van de lijst. Open de nieuwe gegevensprovider en stel het type in op Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager

    Leap Data Provider toevoegen

    • Selecteer Klonen om de standaardinstellingen voor Leap Motion te wijzigen.

    LeapDataProviderPreClone

    • De Leap Motion-gegevensprovider bevat de LeapControllerOrientation eigenschap die de locatie van de Leap Motion Controller is. LeapControllerOrientation.Headset geeft aan dat de controller is gekoppeld aan een headset. LeapControllerOrientation.Desk geeft aan dat de controller plat op het bureau is geplaatst. De standaardwaarde is ingesteld op LeapControllerOrientation.Headset.

    • Elke richting van de controller bevat offset-eigenschappen:

      • De offset-eigenschappen van de headsetstand weerspiegelen de offset-eigenschappen in het onderdeel LeapXRServiceProvider. De LeapVRDeviceOffsetMode heeft drie opties: Standaard, Handmatige hoofdverschoven en Transformeren. Als de offsetmodus Standaard is, wordt er geen offset toegepast op de Leap Motion Controller. Met de modus Handmatige hoofdverschuiving kunnen drie eigenschappen worden gewijzigd: LeapVRDeviceOffsetY, LeapVRDeviceOffsetZ en LeapVRDeviceTiltX. De eigenschapswaarden van de as offset worden vervolgens toegepast op de standaardplaatsing van de controller. De offsetmodus Transformeren bevat de LeapVRDeviceOrigin eigenschap Transformeren, waarmee een nieuwe oorsprong voor de Leap Motion Controller wordt opgegeven.

      • De afdrukstand van het bureau bevat de LeapControllerOffset eigenschap waarmee de ankerpositie van de spronghanden van het bureau wordt gedefinieerd. De verschuiving wordt berekend ten opzichte van de positie van de hoofdcamera en de standaardwaarde is (0,-0,2, 0,35) om ervoor te zorgen dat de handen voor en in het zicht van de camera verschijnen.

        Notitie

        De offset-eigenschappen in het profiel worden eenmaal toegepast wanneer de toepassing wordt gestart. Als u de waarden tijdens runtime wilt wijzigen, haalt u de Leap Motion Service Provider op uit de Leap Motion-Apparaatbeheer:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance en ExitPinchDistance zijn de afstandsdrempels voor de detectie van knijp-/luchttikbewegingen. Het knijpbeweging wordt berekend door de afstand tussen de wijsvingerpunt en de duimpunt te meten. Als u een gebeurtenis bij invoer omlaag wilt genereren, is de standaardwaarde EnterPinchDistance ingesteld op 0,02. Als u een gebeurtenis bij invoer omhoog wilt verhogen (waarbij de knijp wordt afgesloten), is de standaardafstand tussen de wijsvingerpunt en de duimpunt 0,05.

    LeapControllerOrientation: Headset (standaard)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:Bureau

    LeapDeskGif

    LeapDeskInspector

  4. De Leap Motion-gegevensprovider testen

    • Nadat Leap Motion Data Provider is toegevoegd aan het invoersysteemprofiel, drukt u op Play, beweegt u uw hand voor de Leap Motion Controller en ziet u de gezamenlijke weergave van de hand.
  5. Uw project bouwen

    • Ga naar Instellingen voor het maken > van bestanden
    • Alleen zelfstandige builds worden ondersteund als u de Leap Motion-gegevensprovider gebruikt.
    • Zie MRTK bouwen en implementeren in WMR-headsets (zelfstandig) voor instructies over het gebruik van een Windows Mixed Reality headset voor zelfstandige builds.

De handgewrichten krijgen

Het ophalen van gewrichten met behulp van de Leap Motion Data Provider is identiek aan het ophalen van handgewrichten voor een MRTK-gelede hand. Zie Handtracering voor meer informatie.

Met MRTK in een unity-scène en de Leap Motion-gegevensprovider toegevoegd als invoergegevensprovider in het invoersysteemprofiel, maakt u een leeg gameobject en voegt u het volgende voorbeeldscript toe.

Dit script is een eenvoudig voorbeeld van het ophalen van de houding van de palmverbinding in een schrikbewegingshand. Een bol volgt de linker schrikkelshand, terwijl een kubus de rechter schrikkelshand volgt.

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;
        }
    }
}

Werkstroomtip voor Unity-editor

Voor het gebruik van de Leap Motion-gegevensprovider is geen VR-headset vereist. Wijzigingen in een MRTK-app kunnen in de editor worden getest met de spronghanden zonder headset.

De Leap Motion Hands wordt weergegeven in de editor, zonder dat er een VR-headset is aangesloten. Als de LeapControllerOrientation is ingesteld op Headset, moet de Leap Motion-controller met één hand omhoog worden gehouden met de camera naar voren gericht.

Notitie

Als de camera wordt verplaatst met behulp van WASD-toetsen in de editor en de LeapControllerOrientationheadset is, zullen de handen de camera niet volgen. De handen volgen alleen de camerabeweging als een VR-headset is aangesloten terwijl de LeapControllerOrientationheadset is ingesteld. De spronghanden volgen de camerabeweging in de editor als de LeapControllerOrientation is ingesteld op Bureau.

Leap Motion verwijderen uit het project

  1. Navigeer naar de Mixed Reality Toolkit>Leap Motion>Separate Leap Motion Unity Modules
    • Laat Unity vernieuwen als verwijzingen in het bestand Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef worden gewijzigd in deze stap
  2. Unity sluiten
  3. Sluit Visual Studio als deze is geopend
  4. Open Bestandenverkenner en navigeer naar de hoofdmap van het MRTK Unity-project
    • De map UnityProjectName/Library verwijderen
    • Verwijder de map UnityProjectName/Assets/Plugins/LeapMotion
    • Verwijder het bestand UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Unity opnieuw openen

In Unity 2018.4 ziet u mogelijk dat er nog steeds fouten in de console blijven na het verwijderen van de bibliotheek en de Leap Motion Core-assets. Als er fouten worden geregistreerd na het opnieuw openen, start u Unity opnieuw op.

Algemene fouten

Leap Motion is niet geïntegreerd met MRTK

Testen of de Leap Motion Unity Modules zijn geïntegreerd met MRTK:

  • Navigeer naar Mixed Reality Toolkit > Hulpprogramma's > Leap Motion > Check-integratiestatus
    • Er wordt een pop-upvenster weergegeven met een bericht over de vraag of de Leap Motion Unity-modules al dan niet zijn geïntegreerd met MRTK.
  • Als in het bericht staat dat de assets niet zijn geïntegreerd:
    • Zorg ervoor dat de Leap Motion Unity-modules zich in het project bevinden
    • Zorg ervoor dat de toegevoegde versie wordt ondersteund. Zie de tabel boven aan de pagina voor ondersteunde versies.
    • Probeer Mixed Reality Toolkit > Hulpprogramma's > Leap Motion Integreren > Leap Motion Unity Modules

Het kopiëren van assembly Multiplayer HLAPI is mislukt

Bij het importeren van de Leap Motion Unity Core Assets kan deze fout worden geregistreerd:

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

Oplossing

  • Een oplossing voor de korte termijn is om Unity opnieuw te starten. Zie Probleem 7761 voor meer informatie.

Voorbeeldscène van leap motion

In de voorbeeldscène wordt het profiel DefaultLeapMotionConfiguration gebruikt en wordt bepaald of het Unity-project juist is geconfigureerd voor het gebruik van de Leap Motion Data Provider.

De voorbeeldscène bevindt zich in het pakket Microsoft.MixedReality.Toolkit.Examples in de map MRTK/Examples/Demos/HandTracking/ .

Zie ook