Använda Leap Motion

En Handkontroll för skott rörelse krävs för att använda den här dataprovidern.

Leap Motion Data Provider möjliggör tydligt handspårning för VR och kan vara användbart för snabba prototyper i redigeraren. Dataleverantören kan konfigureras för att använda Den skott rörelsekontroller som monterats på ett headset eller placerats på ett skrivbord med ansiktet uppåt.

LeapMotionIntroGif

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

MRTK-version Versioner av 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ärkningen nedan)

Anteckning

Unity Modules 4.9.1 kräver spårningstjänsten Gemini 5.2 eller senare och stöds endast officiellt i Unity 2019. Se den här versionen för 4.9.1.

Använda handspårning för Leap Motion (från Ultraleap) i MRTK

  1. Importera MRTK och Leap Motion Unity-modulerna

    • Installera den senaste programvaran för Skott rörelsespårning 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 till projektet
      • Importera endast Core-paketet i Unity-modulerna

    Viktigt

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

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

  2. Integrera Leap Motion Unity-modulerna med MRTK

    • När Unity-modulerna är i projektet går du till Mixed Reality ToolkitLeap MotionIntegrate Leap Motion Unity Modules

    Anteckning

    Integreringen av Unity-modulerna till 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ängd.

    LeapMotionIntegration

  3. Lägga till Data Provider för skott rörelse

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

    LeapMotionProfileClone

    • Välj konfigurationsprofilen för indata

    Konfigurationsprofil för indata 1

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

    LeapMotionInputProfileClone

    • Öppna avsnittet Input Data Providers (Leverantörer av indata) och välj Add Data Provider (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 Add Data Provider

    • Välj Klona för att ändra standardinställningarna för Skott rörelse.

    LeapDataProviderPreClone

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

    • Varje styrenhetsorientering innehåller förskjutningsegenskaper:

      • Egenskaperna för orienteringsförskjutning i Headset speglar förskjutningsegenskaperna i komponenten LeapXRServiceProvider. Har LeapVRDeviceOffsetMode tre alternativ: Standard, Manuell huvudförskjutning och Transformering. Om förskjutningsläget är Standard tillämpas inte en förskjutning på skottförskjutningskontrollanten. I läget manuell huvudförskjutning kan du ändra tre egenskaper: LeapVRDeviceOffsetYLeapVRDeviceOffsetZ och LeapVRDeviceTiltX . Egenskapsvärdena för axelförskjutningen tillämpas sedan på standardkontrollantens placering. Läget för transformeringsförskjutning innehåller LeapVRDeviceOrigin egenskapen Transformera som anger ett nytt ursprung för Leap Motion Controller.

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

        Anteckning

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

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance och ExitPinchDistance är avståndströsklar för gesteridentifiering med dra ihop/tryck i luften. Gesten dra ihop beräknas genom att mäta avståndet mellan indexets fingertips och tumtipset. Om du vill höja en händelse vid indata ned är EnterPinchDistance standardvärdet 0,02. Om du vill höja en händelse vid indata (lämnar dra ihop) är standardavståndet mellan indexets fingertips och tumtipset 0,05.

    LeapControllerOrientation: Headset (standard) LeapControllerOrientation: Skrivbord
    LeapHeadsetGif LeapDeskGif
    LeapHeadsetInspector LeapDeskInspector
  4. Testa Leap Motion Data Provider

    • När Du har lagt till en dataprovider för Skott rörelse i indatasystemprofilen trycker du på spela upp och flyttar din hand framför Handkontroll för att se en gemensam representation av handen.
  5. Skapa projektet

    • Gå till File Build Inställningar
    • Endast fristående byggen stöds om du använder Leap Motion Data Provider.
    • Anvisningar om hur du använder ett Windows Mixed Reality headset för fristående byggen finns i Skapa och distribuera MRTK till WMR Headsets (fristående).

Hämta handskriften

Att bli van vid användning av Leap Motion Data Provider är identisk med handfogning för en MRTK-ledad hand. Mer information finns i Handspårning.

Med MRTK i en Unity-scen och Leap Motion Data Provider läggs 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 attityden för den gemensamma attityden i en skottförhand. En sfär följer den vänstra skotthanden medan en kub följer den högra skotthanden.

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 inte ett VR-headset. Ändringar i en MRTK-app kan testas i redigeraren med Skott-händerna utan headset.

Leap Motion Hands visas i redigeraren, utan att ett VR-headset är anslutet. Om LeapControllerOrientation är inställt LeapControllerOrientationmåste handkontrollen för Skott rörelse hållas upp med en hand med kameran riktad framåt.

Anteckning

Om kameran flyttas med WASD-nycklar i redigeraren och är LeapControllerOrientationLeapControllerOrientationföljer inte händerna kameran. Händerna följer bara kameraförflyttningen om ett VR-headset är anslutet medan LeapControllerOrientation är inställt LeapControllerOrientation Skott hands följer kameraförflyttningen i redigeraren om LeapControllerOrientation är inställt på Desk ( LeapControllerOrientation

Ta bort Skott rörelse från Project

  1. Gå till de Mixed Reality ToolkitLeap MotionSeparate Leap Motion Unity-modulerna
    • Låt Unity uppdateras 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 navigera till roten för MRTK Unity-projektet
    • Ta bort katalogen UnityProjectName/Library
    • Ta bort katalogen UnityProjectName/Assets/Plugins/LeapMotion
    • Ta bort UnityProjectName/Assets/Plugins/LeapMotion.meta-filen
  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 att du har öppnat igen 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 version som lagts till stöds. Se tabellen överst på sidan för versioner som stöds.
    • Prova Mixed Reality Toolkit Utilities > Leap Motion Integrate Leap Motion Unity > Modules

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

Vid import av Leap Motion Unity Core-tillgångar 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

Exempelscen för skott rörelse

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