Använda Leap Motion och Ultraleap – MRTK2

En Leap Motion Controller krävs för att använda den här dataprovidern.

Leap Motion Data Provider möjliggör ledad handspårning för VR och kan vara användbar för snabba prototyper i redigeraren. Dataleverantören kan konfigureras att använda Leap Motion Controller monterad på ett headset eller placeras på ett skrivbord med ansiktet uppåt.

LeapMotionIntroGif

Den här providern kan användas i redigeraren och på enheten på den fristående plattformen. Den kan också användas i redigeringsprogrammet på UWP-plattformen men INTE i en UWP-version.

MRTK-version Leap Motion Unity-moduler som stöds
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 (se anmärkning nedan)

Anteckning

Unity-moduler 4.9.1 kräver spårningstjänsten Gemini 5.2 eller senare. Unity-plugin-programmet V4.9.1 stöds endast officiellt på Unity 2019. Se viktig information för 4.9.1.

Unity-modulerna har bytt namn till Unity-plugin-programmet i V5.0.0.

MRTK-version Ultraleap Unity Plugin-versioner stöds
2.8.0 5.3.0 (se anmärkning nedan)

Anteckning

Unity Plugin-versionerna 5.0.0, 5.1.0 och 5.2.0 stöds inte i någon version av MRTK. Användare rekommenderas att uppgradera till 5.3.0. Unity Plugin 5.3.0 kräver gemini 5.2-spårningstjänsten eller senare.

Använda Leap Motion (by Ultraleap) handspårning i MRTK

  1. Importera MRTK och Leap Motion Unity-modulerna/Unity-plugin-programmet

    • Installera den senaste Leap Motion Tracking-programvaran för att hämta spårningstjänsten om den inte redan är installerad
    • Importera paketet Microsoft.MixedReality.Toolkit.Foundation till Unity-projektet.
    • Ladda ned och importera den senaste versionen av Leap Motion Unity-modulerna/Unity-plugin-programmet till projektet
      • För Unity-moduler: importera endast Core-paketet i projektet
      • För Unity-plugin-programmet: importera endast spårningspaketet i projektet. Endast .unitypackages stöds för tillfället.

    Viktigt

    Unity har föråldrat SelectionMode.OnlyUserModifiable efter Unity 2019.4.19, vilket resulterar i följande fel från Skriptet Ultraleap Hotkeys.cs: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): fel CS0619: 'SelectionMode.OnlyUserModifiable' är föråldrad: ''OnlyUserModifiable' är föråldrad. Använd "Redigerbar" i stället. (UnityUpgradeable) –> Redigerbar".

    Lös problemen genom att ändra SelectionMode.OnlyUserModifiable till SelectionMode.Editable i skriptet Hotkeys.cs i Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Integrera Leap Motion Unity-modulerna/Unity-plugin-programmet med MRTK

    • När Unity-modulerna/Unity-plugin-programmet finns i projektet navigerar du till Mixed Reality>Toolkit>Utilities>Leap Motion>Integrate Leap Motion Unity Modules.

    Anteckning

    Integreringen av Unity-modulerna med MRTK lägger till 10 sammansättningsdefinitioner i projektet och lägger till referenser till sammansättningsdefinitionen Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Kontrollera att Visual Studio är stängt.

    LeapMotionIntegration

  3. Lägga till Leap Motion Data Provider

    • Skapa en ny Unity-scen
    • Lägg till MRTK i scenen genom att gå till Mixed Reality Toolkit>Lägg till i scen och konfigurera
    • Välj mixedrealityToolkit-spelobjektet i hierarkin och välj Kopiera och anpassa för att klona standardprofilen för mixad verklighet.

    LeapMotionProfileClone

    • Välj indatakonfigurationsprofilen

    Konfigurationsprofil för indata 1

    • Välj Klona i indatasystemprofilen för att aktivera ändring.

    LeapMotionInputProfileClone

    • Öppna avsnittet Indataprovidrar , välj Lägg till dataprovider längst upp. En ny dataprovider läggs till i slutet av listan. Öppna den nya dataprovidern och ange Typ till Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager

    Leap Lägg till dataprovider

    • Välj Klona för att ändra standardinställningarna för Leap Motion.

    LeapDataProviderPreClone

    • Leap Motion Data Provider innehåller LeapControllerOrientation egenskapen som är platsen för Leap Motion Controller. LeapControllerOrientation.Headset anger att styrenheten är monterad på ett headset. LeapControllerOrientation.Desk indikerar att styrenheten är placerad platt på skrivbordet. Standardvärdet är inställt på LeapControllerOrientation.Headset.

    • Varje kontrollantorientering innehåller förskjutningsegenskaper:

      • Egenskaperna för förskjutning av headsetets orientering speglar förskjutningsegenskaperna i LeapXRServiceProvider-komponenten. LeapVRDeviceOffsetMode har tre alternativ: Standard, Manuell förskjutning av huvud och transformering. Om förskjutningsläget är Standard tillämpas inte en förskjutning på Leap Motion Controller. Läget Manuell förskjutning av huvud tillåter ändring av tre egenskaper: LeapVRDeviceOffsetY, LeapVRDeviceOffsetZ och LeapVRDeviceTiltX. Egenskapsvärdena för axelförskjutning tillämpas sedan på standardkontrollens placering. Förskjutningsläget Transformera innehåller LeapVRDeviceOrigin egenskapen Transformera som anger ett nytt ursprung för Leap Motion Controller.

      • Skrivbordsorienteringen innehåller egenskapen LeapControllerOffset som definierar fästpunktspositionen för skrivbordshoppshänderna. Förskjutningen beräknas i förhållande till huvudkamerans position och standardvärdet är (0,-0,2, 0,35) för att se till att händerna visas framför och i kameran.

        Anteckning

        Förskjutningsegenskaperna i profilen tillämpas en gång när programmet startas. Om du vill ändra värdena under körning hämtar du Leap Motion Service-providern från Leap Motion Enhetshanteraren:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance och ExitPinchDistance är avståndströsklarna för gestidentifiering med nypa/lufttryck. Nypgesten beräknas genom att mäta avståndet mellan pekfingerspetsen och tumspetsen. Om du vill aktivera en händelse för indata är standardinställningen EnterPinchDistance 0,02. Om du vill höja en händelse vid inmatning (avsluta nypningen) är standardavståndet mellan pekfingerspetsen och tumspetsen 0,05.

    LeapControllerOrientation: Headset (standard)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:Skrivbord

    LeapDeskGif

    LeapDeskInspector

  4. Testa Leap Motion Data Provider

    • När Leap Motion Data Provider har lagts till i indatasystemprofilen trycker du på Spela upp, flyttar handen framför Leap Motion Controller och du bör se den gemensamma representationen av handen.
  5. Skapa projektet

Få handlederna

Att få leder med Leap Motion Data Provider är identiskt med gemensam hämtning av en MRTK-artikulerad hand. Mer information finns i Handspårning.

Med MRTK i en unity-scen och Leap Motion Data Provider som lagts till som indataprovider i indatasystemprofilen skapar du ett tomt spelobjekt och bifogar följande exempelskript.

Det här skriptet är ett enkelt exempel på hur du hämtar palmfogens pose i en Leap Motion Hand. En sfär följer den vänstra Leap-handen medan en kub följer den högra Leap-handen.

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

Arbetsflödestips för Unity-redigeraren

Användning av Leap Motion Data Provider kräver inget VR-headset. Ändringar i en MRTK-app kan testas i redigeraren med Leap-händerna utan headset.

Leap Motion Hands kommer att dyka upp i redigeraren, utan ett VR-headset inkopplat. Om är inställt på LeapControllerOrientationHeadset måste Leap Motion-styrenheten hållas upp med en hand med kameran framåtriktad.

Anteckning

Om kameran flyttas med WASD-nycklar i redigeraren och LeapControllerOrientation är Headset följer inte händerna kameran. Händerna följer endast kamerans rörelse om ett VR-headset är anslutet medan headsetetLeapControllerOrientation är inställt. Leap-händerna följer kamerarörelsen i redigeraren om LeapControllerOrientation är inställd på Desk.

Ta bort leap motion från projektet

  1. Gå till modulen Mixed Reality Toolkit>Leap Motion>Separate Leap Motion Unity
    • Låt Unity uppdatera som referenser i filen Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef ändras i det här steget
  2. Stäng Unity
  3. Stäng Visual Studio om det är öppet
  4. Öppna Utforskaren och gå till roten för MRTK Unity-projektet
    • Ta bort katalogen UnityProjectName/Library
    • Ta bort katalogen UnityProjectName/Assets/Plugins/LeapMotion
    • Ta bort filen UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Öppna Unity igen

I Unity 2018.4 kanske du märker att felen fortfarande finns kvar i konsolen när du har tagit bort biblioteket och Leap Motion Core-tillgångarna. Om fel loggas efter återöppningen startar du om Unity igen.

Vanliga fel

Leap Motion har inte integrerats med MRTK

Så här testar du om Leap Motion Unity-modulerna har integrerats med MRTK:

  • Gå till Mixed Reality Toolkit > Utilities > Leap Motion > Check Integration Status
    • Då visas ett popup-fönster med ett meddelande om huruvida Leap Motion Unity-modulerna har integrerats med MRTK eller inte.
  • Om meddelandet säger att tillgångarna inte har integrerats:
    • Kontrollera att Leap Motion Unity-modulerna finns i projektet
    • Kontrollera att den tillagda versionen stöds. Se tabellen överst på sidan för versioner som stöds.
    • Prova Mixed Reality Toolkit > Utilities > Leap Motion > Integrate Leap Motion Unity-moduler

Kopiering av sammansättning för HLAPI för flera spelare misslyckades

Vid import av Leap Motion Unity Core-tillgångarna kan det här felet loggas:

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

Lösning

  • En kortsiktig lösning är att starta om Unity. Mer information finns i Problem 7761 .

Leap Motion Example Scene

Exempelscenen använder profilen DefaultLeapMotionConfiguration och avgör om Unity-projektet har konfigurerats korrekt för att använda Leap Motion Data Provider.

Exempelscenen finns i paketet Microsoft.MixedReality.Toolkit.Examples i katalogen MRTK/Examples/Demos/HandTracking/ .

Se även