Leap Motion gebruiken

Een Leap Motion Controller is vereist voor het gebruik van deze gegevensprovider.

De Leap Motion Data Provider maakt handtracering mogelijk voor VR en kan nuttig zijn voor snelle prototypen in de editor. De gegevensprovider kan worden geconfigureerd voor het gebruik van de Leap Motion Controller die is gekoppeld aan een headset of op een bureau face-up 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 vereisen de Gemini 5.2-traceringsservice of hoger en worden alleen officieel ondersteund op Unity 2019. Zie releaseopmerkingen voor 4.9.1.

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

  1. MRTK en de Leap Motion Unity-modules importeren

    • Installeer de nieuwste Leap Motion Tracking Software om de Tracking Service op te halen als deze nog niet is geïnstalleerd
    • Importeer de Microsoft.MixedReality.Toolkit. Foundation-pakket in het Unity-project.
    • Download en importeer de nieuwste versie van de Leap Motion Unity Modules in het project
      • Importeer alleen het Core-pakket in de Unity-modules

    Belangrijk

    Unity heeft SelectionMode.OnlyUserModifiable na Unity 2019.4.19 afgeschaft, wat resulteert in de volgende fout die afkomstig is van het script Ultraleap Hotkeys.cs: 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'.

    Wijzig selectiemode.OnlyUserModifiable in SelectionMode.Editable in het script Hotkeys.cs in Plugins/LeapMotion/Core/Editor/Hotkeys.cs om de problemen op te lossen.

  2. De Leap Motion Unity-modules integreren met MRTK

    • Nadat de Unity-modules zich in het project bevinden, gaat u naar Mixed Reality Toolkit>Leap MotionIntegrate>Leap Motion Unity Modules

    Notitie

    Door de Unity Modules te integreren met MRTK worden 10 assemblydefinities toegevoegd aan het project en worden verwijzingen toegevoegd aan microsoft.MixedReality.Toolkit. Providers.LeapMotion assembly definitie. 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

    Input Configuration Profile 1

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

    LeapMotionInputProfileClone

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

    Leap Add Data Provider

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

    LeapDataProviderPreClone

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

    • Elke afdrukstand van de controller bevat verschuivingseigenschappen:

      • De offseteigenschappen van de headset spiegelen de offseteigenschappen in het onderdeel LeapXRServiceProvider. De LeapVRDeviceOffsetMode heeft drie opties: Standaard, Handmatige kop verschuiving en transformatie. Als de offsetmodus Standaard is, wordt er geen offset toegepast op de Leap Motion Controller. De modus Handmatige hoofdverschil maakt het mogelijk om drie eigenschappen te wijzigen: LeapVRDeviceOffsetYen LeapVRDeviceOffsetZLeapVRDeviceTiltX. De waarden voor de verschuivingseigenschap van de as worden vervolgens toegepast op de standaardplaatsing van de controller. De offsetmodus Transformeren bevat de LeapVRDeviceOrigin eigenschap Transform die een nieuwe oorsprong voor de Leap Motion Controller aangeeft.

      • De afdrukstand Bureau bevat de LeapControllerOffset eigenschap waarmee de ankerpositie van de spronghanden van het bureau wordt gedefinieerd. De verschuiving wordt berekend ten opzichte van de hoofdcamerapositie en de standaardwaarde is (0,-0,2, 0,35) om ervoor te zorgen dat de handen vóór en in de weergave van de camera verschijnen.

        Notitie

        De offseteigenschappen 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 drempelwaarden voor de afstand voor detectie van knijp-/luchtbewegingen. Het knijpbeweging wordt berekend door de afstand tussen de indexvingertip en de duimtip te meten. Als u een gebeurtenis voor invoer omlaag wilt genereren, is de standaardwaarde EnterPinchDistance ingesteld op 0,02. Als u een gebeurtenis wilt verhogen bij invoer (het afsluiten van de knijp), is de standaardafstand tussen de indexvingertip en de duimtip 0,05.

    LeapControllerOrientation: Headset (standaard) LeapControllerOrientation: Bureau
    LeapHeadsetGif LeapDeskGif
    LeapHeadsetInspector LeapDeskInspector
  4. De Leap Motion-gegevensprovider testen

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

    • Navigeer naar Instellingen voor bestandsbuild >
    • Alleen zelfstandige builds worden ondersteund als u de Leap Motion Data Provider 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 handgewricht ophalen voor een MRTK-knik uitgeknikte hand. Zie Handtracking voor meer informatie.

Met MRTK in een unity-scène en de Leap Motion Data Provider die is 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 Leap Motion Hand. Een bol volgt de linker leap-hand terwijl een kubus de rechter Leap-hand 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 van Unity-editor

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

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

Notitie

Als de camera wordt verplaatst met BEHULP van WASD-toetsen in de editor en de LeapControllerOrientationheadset is, volgen de handen de camera niet. De handen volgen alleen camerabewegingen als een VR-headset is aangesloten terwijl de LeapControllerOrientationheadset is ingesteld. De Leap-handen volgen de camerabeweging in de editor als deze LeapControllerOrientation is ingesteld op Desk.

Leap Motion verwijderen uit de Project

  1. Navigeer naar de Mixed Reality Toolkit>LeapMotionSeparate> Leap Motion Unity Modules
    • Laat Unity vernieuwen als verwijzingen in microsoft.MixedReality.Toolkit. Het bestand Providers.LeapMotion.asmdef wordt in deze stap gewijzigd
  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
    • De map UnityProjectName/Assets/Plugins/LeapMotion verwijderen
    • Het UnityProjectName/Assets/Plugins/LeapMotion.meta-bestand verwijderen
  5. Unity opnieuw openen

In Unity 2018.4 ziet u mogelijk dat er nog steeds fouten in de console blijven staan 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.

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 > Utilities > Leap Motion > Check Integration Status
    • Hiermee wordt een pop-upvenster weergegeven met een bericht over of de Leap Motion Unity-modules al dan niet zijn geïntegreerd met MRTK.
  • Als in het bericht wordt aangegeven 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 bovenaan de pagina voor ondersteunde versies.
    • Probeer Mixed Reality Toolkit > Utilities > Leap Motion > Integrate 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 op korte termijn is om Unity opnieuw op te starten. Zie Probleem 7761 voor meer informatie.

Voorbeeldscène Leap Motion

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

De voorbeeldscène bevindt zich in microsoft.MixedReality.Toolkit. Voorbeelden pakket in de MRTK/Examples/Demos/HandTracking/directory.

Zie ook