Używanie funkcji Leap Motion i Ultraleap — MRTK2

Kontroler ruchu skokowego jest wymagany do korzystania z tego dostawcy danych.

Dostawca danych Leap Motion umożliwia przegubowe śledzenie rąk dla vr i może być przydatne do szybkiego tworzenia prototypów w edytorze. Dostawca danych można skonfigurować do używania kontrolera Leap Motion Controller zainstalowanego na zestawie słuchawkowym lub umieszczonym na biurku w górę.

LeapMotionIntroGif

Ten dostawca może być używany w edytorze i na urządzeniu na platformie autonomicznej. Można go również używać w edytorze na platformie UWP, ale nie w kompilacji platformy UWP.

Wersja zestawu narzędzi MRTK Obsługiwane wersje modułów Aparatu Unity Leap Motion
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 (patrz uwaga poniżej)

Uwaga

Moduły aparatu Unity w wersji 4.9.1 wymagają usługi śledzenia Gemini 5.2 lub nowszej. Wtyczka aparatu Unity w wersji 4.9.1 jest oficjalnie obsługiwana tylko w środowisku Unity 2019. Zobacz informacje o wersji dla wersji 4.9.1.

Nazwa modułów Aparatu Unity została zmieniona na Wtyczkę aparatu Unity w wersji 5.0.0.

Wersja zestawu narzędzi MRTK Obsługiwane wersje wtyczki Ultraleap Unity
2.8.0 5.3.0 (patrz uwaga poniżej)

Uwaga

Wtyczka aparatu Unity w wersji 5.0.0, 5.1.0 i 5.2.0 nie jest obsługiwana w żadnej wersji zestawu NARZĘDZI MRTK. Zaleca się uaktualnienie użytkowników do wersji 5.3.0. Wtyczka Aparatu Unity w wersji 5.3.0 wymaga usługi śledzenia Gemini 5.2 lub nowszej.

Używanie funkcji Leap Motion (by Ultraleap) śledzenia rąk w narzędziu MRTK

  1. Importowanie zestawu NARZĘDZI MRTK i modułów aparatu Unity Leap Motion / wtyczki aparatu Unity

    • Zainstaluj najnowsze oprogramowanie Leap Motion Tracking, aby pobrać usługę śledzenia, jeśli nie została jeszcze zainstalowana
    • Zaimportuj pakiet Microsoft.MixedReality.Toolkit.Foundation do projektu Aparatu Unity.
    • Pobierz i zaimportuj najnowszą wersję modułów Leap Motion Unity / wtyczki Aparatu Unity do projektu
      • W przypadku modułów aparatu Unity: zaimportuj tylko pakiet Core w projekcie
      • W przypadku wtyczki aparatu Unity: zaimportuj tylko pakiet Tracking w projekcie. Obecnie obsługiwane są tylko pakiety unitypackage.

    Ważne

    Aparat Unity przestarzały SelectionMode.OnlyUserModifiable po unity 2019.4.19, co powoduje następujący błąd pochodzący z skryptu Ultraleap Hotkeys.cs: Assets\Plugins\LeapMotion\Core\Editor\Hotkeys.cs(24,91): błąd CS0619: 'SelectionMode.OnlyUserModifiable' jest przestarzały: "OnlyUserModifiable" jest przestarzały. Zamiast tego użyj opcji "Edytowalne". (UnityUpgradeable) —> edytowalne".

    Aby rozwiązać problemy, zmień element SelectionMode.OnlyUserModifiable na SelectionMode.Editable w skrypcie Hotkeys.cs znajdującym się w pliku Plugins/LeapMotion/Core/Editor/Hotkeys.cs.

  2. Integrowanie modułów aparatu Unity Leap Motion / wtyczki Aparatu Unity z zestawem NARZĘDZI MRTK

    • Gdy moduły aparatu Unity /wtyczka aparatu Unity znajdują się w projekcie, przejdź do pozycji Mixed Reality>Toolkit>Utilities>Leap MotionIntegrate Leap Motion Unity Modules (Integrowanie modułów aparatu Leap Motion> Unity).

    Uwaga

    Zintegrowanie modułów aparatu Unity z zestawem MRTK dodaje do projektu 10 definicji zestawów i dodaje odwołania do definicji zestawu Microsoft.MixedReality.Toolkit.Providers.LeapMotion . Upewnij się, że program Visual Studio jest zamknięty.

    LeapMotionIntegration

  3. Dodawanie dostawcy danych leap motion

    • Tworzenie nowej sceny aparatu Unity
    • Dodaj zestaw narzędzi MRTK do sceny, przechodząc do Mixed Reality Toolkit>Dodaj do sceny i Konfiguruj
    • Wybierz obiekt gry MixedRealityToolkit w hierarchii i wybierz pozycję Kopiuj i dostosuj , aby sklonować domyślny profil rzeczywistości mieszanej.

    LeapMotionProfileClone

    • Wybierz profil konfiguracji danych wejściowych

    Profil konfiguracji wejściowej 1

    • Wybierz pozycję Clone (Klonuj ) w profilu systemu wejściowego, aby włączyć modyfikację.

    LeapMotionInputProfileClone

    • Otwórz sekcję Dostawcy danych wejściowych , wybierz pozycję Dodaj dostawcę danych u góry, a na końcu listy zostanie dodany nowy dostawca danych. Otwórz nowego dostawcę danych i ustaw typ naMicrosoft.MixedReality.Toolkit.LeapMotion.Input > LeapMotionDeviceManager

    Skok dodaj dostawcę danych

    • Wybierz pozycję Klonuj , aby zmienić domyślne ustawienia ruchu skokowego.

    LeapDataProviderPreClone

    • Dostawca danych Leap Motion zawiera LeapControllerOrientation właściwość, która jest lokalizacją kontrolera ruchu leap. LeapControllerOrientation.Headset wskazuje, że kontroler jest zainstalowany na zestawie słuchawkowym. LeapControllerOrientation.Desk wskazuje, że kontroler jest umieszczony płasko na biurku. Wartość domyślna jest ustawiona na LeapControllerOrientation.Headsetwartość .

    • Każda orientacja kontrolera zawiera właściwości przesunięcia:

      • Właściwości przesunięcia orientacji zestawu słuchawkowego odzwierciedlają właściwości przesunięcia w składniku LeapXRServiceProvider. Dostępne LeapVRDeviceOffsetMode są trzy opcje: Domyślne, Ręczne przesunięcie głowy i przekształcenie. Jeśli tryb przesunięcia ma wartość Domyślna, przesunięcie nie zostanie zastosowane do kontrolera ruchu przestępnego. Tryb przesunięcia ręcznego głowy umożliwia modyfikację trzech właściwości: LeapVRDeviceOffsetY, LeapVRDeviceOffsetZ i LeapVRDeviceTiltX. Wartości właściwości przesunięcia osi są następnie stosowane do domyślnego umieszczania kontrolera. Tryb przesunięcia Przekształć zawiera LeapVRDeviceOrigin właściwość Transform, która określa nowe źródło dla kontrolera ruchu skokowego.

      • Orientacja biurka zawiera LeapControllerOffset właściwość definiującą położenie kotwicy dłoni skokowych biurka. Przesunięcie jest obliczane względem pozycji kamery głównej, a wartość domyślna to (0,-0,2, 0,35), aby upewnić się, że ręce pojawiają się przed kamerą i w widoku aparatu.

        Uwaga

        Właściwości przesunięcia w profilu są stosowane raz po uruchomieniu aplikacji. Aby zmodyfikować wartości podczas wykonywania, pobierz dostawcę usługi Leap Motion z Menedżer urządzeń Leap Motion:

        LeapMotionDeviceManager leapMotionDeviceManager = CoreServices.GetInputSystemDataProvider<LeapMotionDeviceManager>();
        LeapXRServiceProvider leapXRServiceProvider = leapMotionDeviceManager.LeapMotionServiceProvider as LeapXRServiceProvider; 
        
    • EnterPinchDistance i ExitPinchDistance są progami odległości wykrywania gestów szczypnięcia/naciśnięcia powietrza. Gest szczypty jest obliczany przez pomiar odległości między wskazówką palca indeksu a końcówką palca. Aby zgłosić zdarzenie w dół danych wejściowych, wartość domyślna EnterPinchDistance to 0,02. Aby podnieść zdarzenie wejściowe (zamykanie szczypty), domyślna odległość między wskazówką palca indeksu a końcówką kciuka wynosi 0,05.

    LeapControllerOrientation: Zestaw słuchawkowy (ustawienie domyślne)

    LeapHeadsetGif

    LeapHeadsetInspector

    LeapControllerOrientation:Biurko

    LeapDeskGif

    LeapDeskInspector

  4. Testowanie dostawcy danych leap motion

    • Po dodaniu dostawcy danych Leap Motion do profilu systemu wejściowego naciśnij klawisz Play, przenieś rękę przed kontrolerem Leap Motion i powinna zostać wyświetlona wspólna reprezentacja ręki.
  5. Kompilowanie projektu

Pobieranie stawów ręcznych

Pobieranie stawów przy użyciu dostawcy danych Leap Motion jest identyczne z pobieraniem stawu ręcznego dla ręki przegubowej MRTK. Aby uzyskać więcej informacji, zobacz Śledzenie rąk.

Za pomocą zestawu NARZĘDZI MRTK w scenie aparatu unity i dostawcy danych leap motion dodany jako dostawca danych wejściowych w profilu systemu wejściowego utwórz pusty obiekt gry i dołącz następujący przykładowy skrypt.

Ten skrypt jest prostym przykładem sposobu pobierania pozy stawu palmowego w skokowym ruchu. Sfera podąża za lewą ręką Leap, podczas gdy kostka podąża za prawą ręką Leap.

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

Porada dotycząca przepływu pracy edytora aparatu Unity

Korzystanie z dostawcy danych Leap Motion nie wymaga zestawu słuchawkowego VR. Zmiany w aplikacji MRTK można przetestować w edytorze z rękami Leap bez zestawu słuchawkowego.

Leap Motion Hands pojawi się w edytorze, bez podłączonych zestawów słuchawkowych VR. Jeśli jest LeapControllerOrientation ustawiony na zestaw słuchawkowy, kontroler Leap Motion będzie musiał być trzymany za jedną ręką z aparatem skierowanym do przodu.

Uwaga

Jeśli aparat zostanie przeniesiony przy użyciu kluczy WASD w edytorze i LeapControllerOrientation jest zestaw słuchawkowy, ręce nie będą podążać za aparatem. Ręce będą podążać za ruchem kamery tylko wtedy, gdy zestaw słuchawkowy VR jest podłączony, podczas gdy LeapControllerOrientation jest ustawiony zestaw słuchawkowy. Ręce Leap będą podążać za ruchem aparatu w edytorze, jeśli LeapControllerOrientation ustawiono wartość Desk.

Usuwanie ruchu skokowego z projektu

  1. Przejdź do modułów Mixed Reality Toolkit>Leap Motion>Separate Leap Motion Unity
    • Odświeżanie aparatu Unity jako odwołań w pliku Microsoft.MixedReality.Toolkit.Providers.LeapMotion.asmdef jest modyfikowane w tym kroku
  2. Zamknij aparat Unity
  3. Zamknij program Visual Studio, jeśli jest otwarty
  4. Otwórz Eksplorator plików i przejdź do katalogu głównego projektu APARATU MRTK Unity
    • Usuwanie katalogu UnityProjectName/Library
    • Usuwanie katalogu UnityProjectName/Assets/Plugins/LeapMotion
    • Usuwanie pliku UnityProjectName/Assets/Plugins/LeapMotion.meta
  5. Otwórz ponownie aparat Unity

W środowisku Unity 2018.4 można zauważyć, że błędy nadal pozostają w konsoli po usunięciu biblioteki i zasobów Leap Motion Core. Jeśli błędy są rejestrowane po ponownym otwarciu, uruchom ponownie środowisko Unity.

Typowe błędy

Funkcja Leap Motion nie została zintegrowana z zestawem NARZĘDZI MRTK

Aby sprawdzić, czy moduły aparatu Unity Leap Motion zostały zintegrowane z zestawem NARZĘDZI MRTK:

  • Przejdź do pozycji Mixed Reality Toolkit > Utilities > Leap Motion > Check Status integracji
    • Spowoduje to wyświetlenie wyskakującego okna z komunikatem o tym, czy moduły aparatu Leap Motion Unity zostały zintegrowane z zestawem NARZĘDZI MRTK.
  • Jeśli komunikat informuje, że zasoby nie zostały zintegrowane:
    • Upewnij się, że moduły aparatu Leap Motion Unity znajdują się w projekcie
    • Upewnij się, że dodana wersja jest obsługiwana, zobacz tabelę w górnej części strony dla obsługiwanych wersji.
    • Wypróbuj Mixed Reality Toolkit > Utilities > Leap Motion > Integrate Leap Motion Unity Modules

Kopiowanie zestawu wieloosobowego HLAPI nie powiodło się

Podczas importowania zasobów platformy Leap Motion Unity Core ten błąd może zostać zarejestrowany:

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

Rozwiązanie

  • Krótkoterminowe rozwiązanie polega na ponownym uruchomieniu aparatu Unity. Aby uzyskać więcej informacji, zobacz Problem 7761 .

Przykładowa scena skoku ruchu

Przykładowa scena używa profilu DefaultLeapMotionConfiguration i określa, czy projekt aparatu Unity został poprawnie skonfigurowany do używania dostawcy danych Leap Motion.

Przykładowa scena znajduje się w pakiecie Microsoft.MixedReality.Toolkit.Examples w katalogu MRTK/Examples/Demos/HandTracking/ .

Zobacz też