Použití funkce Leap Motion a Ultraleap – MRTK2

K použití tohoto zprostředkovatele dat se vyžaduje ovladač Leap Motion Controller .

Leap Motion Data Provider umožňuje artikulované sledování rukou pro VR a může být užitečný pro rychlé vytváření prototypů v editoru. Poskytovatele dat je možné nakonfigurovat tak, aby používal ovladač Leap Motion Controller, který je připevněný na náhlavní soupravě nebo umístěn na stole lícem nahoru.

LeapMotionIntroGif

Tohoto poskytovatele je možné použít v editoru a na zařízení na samostatné platformě. Dá se také použít v editoru na platformě UPW, ale NE v buildu UPW.

Verze MRTK Podporované verze modulů Leap Motion Unity
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 (viz poznámka níže)

Poznámka

Moduly Unity 4.9.1 vyžadují sledovací službu Gemini 5.2 nebo vyšší. Modul plug-in Unity verze 4.9.1 je oficiálně podporován pouze v Unity 2019. Viz poznámky k verzi 4.9.1.

Moduly Unity byly ve verzi 5.0.0 přejmenovány na modul plug-in Unity.

Verze MRTK Podporované verze modulů plug-in Unity ultraleap
2.8.0 5.3.0 (viz následující poznámka)

Poznámka

Modul plug-in Unity verze 5.0.0, 5.1.0 a 5.2.0 nejsou podporovány v žádné verzi SADY MRTK. Uživatelům se doporučuje upgradovat na verzi 5.3.0. Modul plug-in Unity 5.3.0 vyžaduje sledovací službu Gemini 5.2 nebo vyšší.

Použití sledování rukou leap motion (by Ultraleap) v MRTK

  1. Import MRTK a modulu Leap Motion Moduly Unity / moduly plug-in Unity

    • Nainstalujte si nejnovější software Leap Motion Tracking, abyste získali službu Sledování, pokud ještě není nainstalovaná.
    • Importujte balíček Microsoft.MixedReality.Toolkit.Foundation do projektu Unity.
    • Stažení a import nejnovější verze modulu Leap Motion Moduly Unity / Moduly plug-in Unity do projektu
      • Moduly Unity: Importujte pouze balíček Core v rámci projektu.
      • Modul plug-in Unity: Importujte pouze sledovací balíček v rámci projektu. V tuto chvíli jsou podporovány pouze .unitypackages.

    Důležité

    Unity zastaralé SelectionMode.OnlyUserModifiable po Unity 2019.4.19, což vede k následující chybě pocházející ze skriptu Ultraleap Hotkeys.cs: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): chyba CS0619: SelectionMode.OnlyUserModifiable je zastaralý: ''OnlyUserModifiable' je zastaralý. Místo toho použijte možnost Upravitelné. (UnityUpgradeable) –> upravitelné.

    Pokud chcete tyto problémy vyřešit, změňte Ve skriptu Hotkeys.cs v modulu Plugins/LeapMotion/Core/Editor/Hotkeys.cs změňte SelectionMode.OnlyUserModifable na SelectionMode.Editable.

  2. Integrace modulů Leap Motion Unity / modulu plug-in Unity s MRTK

    • Jakmile jsou moduly Unity / moduly Plug-in Unity v projektu, přejděte na Mixed Reality>Toolkit>Utilities>Leap Motion>Integrate Leap Motion Unity Modules.

    Poznámka

    Integrace modulů Unity do MRTK přidá do projektu 10 definic sestavení a přidá odkazy na definici sestavení Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Ujistěte se, že je sada Visual Studio zavřená.

    LeapMotionIntegration

  3. Přidání zprostředkovatele dat Leap Motion

    • Vytvoření nové scény Unity
    • Přidání MRTK do scény tak, že přejdete na Mixed Reality Toolkit>Přidat do scény a nakonfigurovat
    • Vyberte objekt hry MixedRealityToolkit v hierarchii a výběrem možnosti Kopírovat a přizpůsobit naklonujte výchozí profil hybridní reality.

    LeapMotionProfileClone

    • Vyberte vstupní konfigurační profil.

    Vstupní konfigurační profil 1

    • V profilu vstupního systému vyberte Clone (Klonovat ) a povolte úpravy.

    LeapMotionInputProfileClone

    • Otevřete část Zprostředkovatelé vstupních dat a v horní části vyberte Přidat poskytovatele dat . Na konec seznamu se přidá nový poskytovatel dat. Otevřete nového zprostředkovatele dat a nastavte typ na Microsoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager.

    Přestupné přidání poskytovatele dat

    • Vyberte Klonovat a změňte výchozí nastavení leap motion.

    LeapDataProviderPreClone

    • Zprostředkovatel dat přestupného LeapControllerOrientation pohybu obsahuje vlastnost, která je umístěním kontroleru přestupného pohybu. LeapControllerOrientation.Headset označuje, že ovladač je připojen k náhlavní soupravě. LeapControllerOrientation.Desk označuje, že ovladač je umístěn na stole. Výchozí hodnota je nastavená na LeapControllerOrientation.Headset.

    • Každá orientace kontroleru obsahuje vlastnosti posunu:

      • Vlastnosti posunu orientace náhlavní soupravy zrcadlí vlastnosti posunu v komponentě LeapXRServiceProvider. Má LeapVRDeviceOffsetMode tři možnosti: Výchozí, Ruční odsazení hlavy a Transformace. Pokud je režim posunu nastaven na Výchozí, pak se posun nepoužije na ovladač přestupných pohybů. Režim Ruční odsazení hlavy umožňuje úpravu tří vlastností: LeapVRDeviceOffsetY, LeapVRDeviceOffsetZ a LeapVRDeviceTiltX. Hodnoty vlastností posunu osy se pak použijí pro výchozí umístění kontroleru. Režim posunu transformace obsahuje transformovat LeapVRDeviceOrigin vlastnost, která určuje nový původ pro Leap Motion Controller.

      • Orientace stolu obsahuje LeapControllerOffset vlastnost, která definuje pozici ukotvení přestupných ruček stolu. Posun se vypočítá vzhledem k pozici hlavní kamery a výchozí hodnota je (0,-0,2, 0,35), aby se zajistilo, že se ruce zobrazují před a před kamerou.

        Poznámka

        Vlastnosti posunu v profilu se použijí jednou při spuštění aplikace. Pokud chcete upravit hodnoty za běhu, získejte poskytovatele služby Leap Motion z Správce zařízení Leap Motion:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance a ExitPinchDistance jsou prahové hodnoty vzdálenosti pro detekci gest stažení prstů nebo klepnutí vzduchem. Gesto stažení prstů se vypočítá měřením vzdálenosti mezi ukazováčkem a hrotem palce. Pokud chcete vyvolat událost on input down, je výchozí hodnota EnterPinchDistance nastavená na 0,02. Pokud chcete zvýšit událost on input up (ukončení stažení), výchozí vzdálenost mezi ukazováčkem a špičkou palce je 0,05.

    LeapControllerOrientation: Náhlavní souprava (výchozí)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:Stolem

    LeapDeskGif

    LeapDeskInspector

  4. Testování poskytovatele dat leap motion

    • Po přidání poskytovatele dat leap motion do profilu vstupního systému stiskněte play, přesuňte ruku před Leap Motion Controller a měli byste vidět společné znázornění ruky.
  5. Sestavení projektu

Získání ručních kloubů

Získání spojení pomocí poskytovatele dat leap motion je stejné jako ruční načtení kloubu pro kloubovou ruku MRTK Kloubová ruka. Další informace najdete v tématu Sledování rukou.

S MRTK ve scéně Unity a Poskytovatelem dat leap motion přidaným jako zprostředkovatel vstupních dat v profilu vstupního systému vytvořte prázdný herní objekt a připojte následující ukázkový skript.

Tento skript je jednoduchým příkladem, jak načíst pozici dlaně v sadě Leap Motion Hand. Koule následuje levou přestupnou ruku, zatímco krychle následuje pravou leap handu.

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

Tip pracovního postupu editoru Unity

Použití poskytovatele dat Leap Motion Data Provider nevyžaduje náhlavní soupravu VR. Změny v aplikaci MRTK je možné testovat v editoru pomocí přestupných rukou bez náhlavní soupravy.

Leap Motion Hands se zobrazí v editoru bez připojené náhlavní soupravy VR. LeapControllerOrientation Pokud je nastavení nastaveno na Náhlavní souprava, bude potřeba ovladač Leap Motion držet jednou rukou a fotoaparátem směřujícím dopředu.

Poznámka

Pokud se kamera přesune pomocí kláves WASD v editoru a LeapControllerOrientation je náhlavní souprava, ruce nebudou následovat za kamerou. Ruce budou sledovat pohyb kamery pouze v případě, že je náhlavní souprava VR zapojena do sítě, zatímco LeapControllerOrientation je nastavená náhlavní souprava. Přestupné ručičky budou sledovat pohyb kamery v editoru, pokud LeapControllerOrientation je nastavená na desku.

Odebrání funkce Leap Motion z projektu

  1. Přejděte na Mixed Reality Toolkit>Leap Motion>– Samostatné moduly Leap Motion Unity
    • Nechte Unity aktualizovat jako odkazy v souboru Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef se upraví v tomto kroku.
  2. Zavřít Unity
  3. Zavření sady Visual Studio, pokud je otevřená
  4. Otevřete Průzkumník souborů a přejděte do kořenového adresáře projektu MRTK Unity.
    • Odstranění adresáře UnityProjectName/Library
    • Odstranění adresáře UnityProjectName/Assets/Plugins/LeapMotion
    • Odstranění souboru UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Znovu otevřít Unity

V Unity 2018.4 si můžete všimnout, že chyby zůstávají v konzole i po odstranění knihovny a prostředků Leap Motion Core. Pokud se po opětovném otevření zaprotokolují chyby, restartujte Unity znovu.

Běžné chyby

Leap Motion není integrovaný s MRTK

Pokud chcete otestovat, jestli se moduly Unity Leap Motion integrovaly s MRTK:

  • Přejděte na Mixed Reality Toolkit > Utilities > Leap Motion > Check Integration Status
    • Zobrazí se automaticky otevírané okno se zprávou o tom, jestli se moduly Leap Motion Unity integrovaly s MRTK.
  • Pokud zpráva říká, že prostředky nebyly integrovány:
    • Ujistěte se, že moduly Unity Leap Motion jsou v projektu.
    • Ujistěte se, že přidaná verze je podporovaná. Informace o podporovaných verzích najdete v tabulce v horní části stránky.
    • Vyzkoušejte Mixed Reality Toolkit > Utilities > Leap Motion > Integrovat moduly Unity Leap Motion

Kopírování sestavení HLAPI pro více hráčů se nezdařilo

Při importu prostředků Unity Core Leap Motion se může zaprotokolovat tato chyba:

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

Řešení

Ukázková scéna s přestupovým pohybem

Ukázková scéna používá profil DefaultLeapMotionConfiguration a určuje, zda byl projekt Unity správně nakonfigurován tak, aby používal zprostředkovatele dat Leap Motion.

Ukázková scéna je obsažena v balíčku Microsoft.MixedReality.Toolkit.Examples v adresáři MRTK/Examples/Demos/HandTracking/ .

Viz také