Leap Motion gebruiken

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

De Leap Motion-gegevensprovider maakt verwoorde handtracking voor VR mogelijk en kan nuttig zijn voor het snel maken van prototypen in de editor. De gegevensprovider kan worden geconfigureerd voor het gebruik van de Leap Motion Controller die is bevestigd op een headset of op een bureau omhoog 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 Versies van Leap Motion Unity-modules die worden ondersteund
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 en wordt alleen officieel ondersteund op Unity 2019. Zie release-opmerkingen voor 4.9.1.

Handtracking met Leap Motion (van Ultraleap) in MRTK

  1. MRTK en de Leap Motion Unity-modules importeren

    • Installeer de nieuwste Leap Motion Tracking-software om de traceringsservice op te halen als deze nog niet is geïnstalleerd
    • Importeer 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 afgeschaft na Unity 2019.4.19. Dit resulteert in de volgende fout afkomstig 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'.

    Als u de problemen wilt oplossen, wijzigt u SelectionMode.OnlyUserModifiable in SelectionMode.Editable in het script Hotkeys.cs in Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. De Leap Motion Unity-modules integreren met MRTK

    • Nadat de Unity-modules in het project zijn, gaat u naar Mixed Reality ToolkitLeap Motion IntegrateLeap Motion Unity-modules

    Notitie

    Door de Unity-modules te integreren in MRTK worden 10 assembly-definities toegevoegd aan het project en worden verwijzingen naar Microsoft.MixedReality.Toolkit. De assemblydefinitie Providers.LeapMotion. Zorg ervoor Visual Studio is gesloten.

    LeapMotionIntegration

  3. De Leap Motion-gegevensprovider toevoegen

    • Een nieuwe Unity-scène maken
    • Voeg MRTK toe aan de scène door te navigeren naar Mixed Reality ToolkitToevoegen aan scène en configureren
    • Selecteer het gameobject MixedRealityToolkit in de hiërarchie en selecteer Kopiëren en aanpassen om het standaardprofiel mixed reality klonen.

    LeapMotionProfileClone

    • Selecteer het invoerconfiguratieprofiel

    Invoerconfiguratieprofiel 1

    • Selecteer Klonen in het invoersysteemprofiel om wijzigingen in te kunnenschakelen.

    LeapMotionInputProfileClone

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

    Leap Add Data Provider

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

    LeapDataProviderPreClone

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

    • Elke controllerstand bevat offseteigenschappen:

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

      • De stand Desk bevat de eigenschap die de ankerpositie van de desk leap hands definieert. De offset 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 de camera worden weergegeven.

        Notitie

        De offseteigenschappen in het profiel worden eenmaal toegepast wanneer de toepassing wordt gestart. Als u de waarden tijdens runtime wilt wijzigen, moet u de Leap Motion-serviceprovider 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 de detectie van knijp-/luchtbewegingen. De knijpgebaar wordt berekend door de afstand tussen de wijsvingerpunt en de vingerafdruk te meten. Als u een gebeurtenis voor invoer wilt verhogen, EnterPinchDistance wordt de standaardwaarde ingesteld op 0,02. Voor het verhogen van een gebeurtenis bij het invoeren (het knijpen wordt afgesloten), is de standaardafstand tussen de wijsvingerpunt en de vingerafdruk 0,05.

    LeapControllerOrientation: Headset (standaard) LeapControllerOrientation: Desk
    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 voor de Leap Motion Controller en ziet u de gezamenlijke weergave van de hand.
  5. Uw project bouwen

    • Navigeer naar Bestandsbouw Instellingen
    • Alleen zelfstandige builds worden ondersteund als u de Leap Motion-gegevensprovider gebruikt.
    • Zie MRTK bouwen en implementeren in WMR Headsets (standalone)voor instructies over het gebruik van een Windows Mixed Reality headset voor zelfstandige builds.

De hand wijzer maken

Het gebruik van de Leap Motion-gegevensprovider is identiek aan handgewricht ophalen voor een met MRTK verwoorde hand. Zie Handtracking 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 moeto 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 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 Leap-handen zonder headset.

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

Notitie

Als de camera wordt verplaatst met behulp van WASD-sleutels in de editor en de headset is, volgen LeapControllerOrientation de handen de camera niet. LeapControllerOrientation De handen volgen alleen camerabewegingen als een VR-headset is aangesloten terwijl LeapControllerOrientation de is ingesteld op LeapControllerOrientation. De Leap-handen volgen de cameraver movement in de editor als LeapControllerOrientation de is ingesteld op LeapControllerOrientation.

Leap Motion verwijderen uit de Project

  1. Navigeer naar de Mixed Reality ToolkitLeap Motion SeparateLeap 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 Verkenner 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 staan nadat u de bibliotheek en de Leap Motion Core Assets hebt verwijderd. Als er fouten worden geregistreerd na het opnieuw openen, start u Unity opnieuw.

Algemene fouten

Leap Motion is niet geïntegreerd met MRTK

Als u wilt testen of de Leap Motion Unity-modules zijn geïntegreerd met MRTK:

  • Navigeer Mixed Reality Toolkit hulpprogramma's > Leap Motion Check Integration > Status
    • Hiermee wordt een pop-upvenster weergegeven met een bericht over of de Leap Motion Unity-modules zijn geïntegreerd met MRTK.
  • Als in het bericht wordt weergegeven dat de assets niet zijn geïntegreerd:
    • Zorg ervoor dat de Leap Motion Unity-modules zich in het project
    • Zorg ervoor dat de toegevoegde versie wordt ondersteund. Zie de tabel boven aan de pagina voor ondersteunde versies.
    • Probeer Mixed Reality Toolkit Leap Motion Leap Motion >> Unity-modules te integreren

Kopiëren van assembly HLAPI voor meerdere spelers is mislukt

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

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

Oplossing

  • Een kortetermijnoplossing is om Unity opnieuw op te starten. Zie Probleem 7761 voor meer informatie.

Voorbeeldscène van Leap Motion

De voorbeeldscène maakt gebruik van het DefaultLeapMotionConfiguration-profiel en bepaalt of het Unity-project correct is geconfigureerd voor het gebruik van de Leap Motion-gegevensprovider.

De voorbeeldscène is opgenomen in microsoft.MixedReality.Toolkit. Voorbeeldpakket in de map MRTK/Examples/Demos/HandTracking/.

Zie ook