Dane wejściowe urządzenia HoloLens (1. generacji) 211: gest

Ważne

Samouczki Mixed Reality Academy zostały zaprojektowane z myślą o urządzeniach HoloLens (1. generacji), Unity 2017 i Mixed Reality immersywnych zestawów słuchawkowych. W związku z tym uważamy, że ważne jest pozostawienie tych samouczków w miejscu dla deweloperów, którzy nadal szukają wskazówek dotyczących opracowywania dla tych urządzeń. Te samouczki nie zostaną zaktualizowane przy użyciu najnowszych zestawów narzędzi ani interakcji używanych do HoloLens 2 i mogą nie być zgodne z nowszymi wersjami aparatu Unity. Będą one utrzymywane w celu kontynuowania pracy na obsługiwanych urządzeniach. Opublikowano nową serię samouczków dla HoloLens 2.

Gesty przekształcają intencję użytkownika w akcję. Za pomocą gestów użytkownicy mogą wchodzić w interakcje z hologramami. W tym kursie dowiesz się, jak śledzić ręce użytkownika, reagować na dane wejściowe użytkownika i przekazywać opinie użytkownikowi na podstawie stanu i lokalizacji.

W języku MR Basics 101 użyliśmy prostego gestu naciśnięcia powietrza do interakcji z naszymi hologramami. Teraz przejdziemy poza gest naciśnięcia powietrza i zapoznamy się z nowymi pojęciami, aby:

  • Wykryj, kiedy ręka użytkownika jest śledzona, i prześlij opinię do użytkownika.
  • Użyj gestu nawigacji, aby obrócić nasze hologramy.
  • Prześlij opinię, gdy ręka użytkownika ma wyjść z widoku.
  • Użyj zdarzeń manipulowania, aby umożliwić użytkownikom przenoszenie hologramów za pomocą rąk.

W tym kursie wrócimy do Eksploratora modelu projektu Aparatu Unity, który utworzyliśmy w module MR Input 210. Nasz przyjaciel astronauty jest z powrotem, aby pomóc nam w eksploracji tych nowych koncepcji gestów.

Ważne

Filmy wideo osadzone w każdym z poniższych rozdziałów zostały nagrane przy użyciu starszej wersji aparatu Unity i zestawu narzędzi Mixed Reality Toolkit. Instrukcje krok po kroku są dokładne i aktualne, ale skrypty i wizualizacje mogą być widoczne w odpowiednich filmach wideo, które są nieaktualne. Filmy pozostają dołączone do potomności i dlatego, że omówione koncepcje nadal mają zastosowanie.

Obsługa urządzeń

Kurs HoloLens Immersyjne zestawy nagłowne
Wejście MR 211: Gest ✔️ ✔️

Przed rozpoczęciem

Wymagania wstępne

Pliki projektu

  • Pobierz pliki wymagane przez projekt. Wymaga aparatu Unity 2017.2 lub nowszego.
  • Cofnij archiwizowanie plików na pulpicie lub innych łatwych w dotarciu do lokalizacji.

Uwaga

Jeśli chcesz przejrzeć kod źródłowy przed pobraniem, jest on dostępny w witrynie GitHub.

Errata i uwagi

  • Opcja "Włącz tylko mój kod" musi być wyłączona (niezaznaczone) w programie Visual Studio w obszarze Narzędzia-Opcje-Debugowanie>> w celu trafienia punktów przerwania w kodzie.

Rozdział 0 — Konfiguracja aparatu Unity

Instrukcje

  1. Uruchom aparat Unity.
  2. Wybierz pozycję Otwórz.
  3. Przejdź do folderu Gest , który wcześniej nie został zarchiwizowany.
  4. Znajdź i wybierz folder Uruchamianie/Eksploratora modeli .
  5. Kliknij przycisk Wybierz folder .
  6. Na panelu Projekt rozwiń folder Sceny .
  7. Kliknij dwukrotnie scenę ModelExplorer , aby załadować ją w akwenie Unity.

Kompilowanie

  1. W akrocie Unity wybierz pozycję Ustawienia kompilacji pliku>.
  2. Jeśli sceny/modelExplorer nie ma na liście Sceny w kompilacji, kliknij przycisk Dodaj otwarte sceny , aby dodać scenę.
  3. Jeśli specjalnie opracowujesz urządzenie HoloLens, ustaw dla urządzenia Target wartośćHoloLens. W przeciwnym razie pozostaw je na dowolnym urządzeniu.
  4. Upewnij się, że dla ustawienia Typ kompilacji ustawiono wartość D3D , a zestaw SDK ma wartość Latest installed (powinien to być zestaw SDK 16299 lub nowszy).
  5. Kliknij pozycję Kompiluj.
  6. Utwórz nowy folder o nazwie "Aplikacja".
  7. Jednym kliknięciem folderu Aplikacja .
  8. Naciśnij pozycję Wybierz folder , a aparat Unity rozpocznie kompilowanie projektu dla programu Visual Studio.

Po zakończeniu działania aparatu Unity zostanie wyświetlone okno Eksplorator plików.

  1. Otwórz folder Aplikacja .
  2. Otwórz rozwiązanie ModelExplorer Visual Studio.

W przypadku wdrażania na urządzeniu HoloLens:

  1. Za pomocą górnego paska narzędzi w programie Visual Studio zmień element docelowy z Debuguj na Wydanie i z ARM na x86.
  2. Kliknij strzałkę listy rozwijanej obok przycisku Maszyna lokalna, a następnie wybierz pozycję Maszyna zdalna.
  3. Wprowadź adres IP urządzenia HoloLens i ustaw opcję Tryb uwierzytelniania na uniwersalny (protokół niezaszyfrowany). Kliknij pozycję Wybierz. Jeśli nie znasz adresu IP urządzenia, zapoznaj się z ustawieniami > sieci & Opcje zaawansowane internetu>.
  4. Na górnym pasku menu kliknij pozycję Debuguj —> Rozpocznij bez debugowania lub naciśnij klawisze Ctrl + F5. Jeśli jest to pierwsze wdrożenie na urządzeniu, konieczne będzie sparowanie go z programem Visual Studio.
  5. Po wdrożeniu aplikacji odrzuć aplikację Fitbox za pomocą gestu wyboru.

W przypadku wdrażania w immersywnym zestawie słuchawkowym:

  1. Za pomocą górnego paska narzędzi w programie Visual Studio zmień element docelowy z Debuguj na Wydanie i z ARM na x64.
  2. Upewnij się, że element docelowy wdrożenia ma ustawioną wartość Maszyna lokalna.
  3. Na górnym pasku menu kliknij pozycję Debuguj —> Rozpocznij bez debugowania lub naciśnij klawisze Ctrl + F5.
  4. Po wdrożeniu aplikacji odrzuć aplikację Fitbox , ściągając wyzwalacz na kontrolerze ruchu.

Uwaga

W panelu Błędy programu Visual Studio mogą wystąpić błędy czerwone. Można je bezpiecznie zignorować. Przejdź do panelu Dane wyjściowe, aby wyświetlić rzeczywisty postęp kompilacji. Błędy w panelu Dane wyjściowe będą wymagały naprawienia (najczęściej są one spowodowane błędem w skrypcie).

Rozdział 1 — Ręcznie wykryta opinia

Cele

  • Zasubskrybuj zdarzenia śledzenia rąk.
  • Użyj opinii kursora, aby pokazać użytkowników, gdy jest śledzona ręka.

Uwaga

Na HoloLens 2 , ręce wykryte ogień za każdym razem, gdy ręce są widoczne (nie tylko wtedy, gdy palec jest skierowana w górę).

Instrukcje

  • W panelu Hierarchy (Hierarchia ) rozwiń obiekt InputManager .
  • Wyszukaj i wybierz obiekt GesturesInput .

Skrypt InteractionInputSource.cs wykonuje następujące kroki:

  1. Subskrybuje zdarzenia InteractionSourceDetected i InteractionSourceLost.
  2. Ustawia stan HandDetected.
  3. Anuluje subskrypcję zdarzeń InteractionSourceDetected i InteractionSourceLost.

Następnie uaktualnimy kursor z danych MR Input 210 do jednego, który pokazuje opinie w zależności od akcji użytkownika.

  1. W panelu Hierarchia wybierz obiekt Kursor i usuń go.
  2. W panelu Project (Projekt ) wyszukaj pozycję CursorWithFeedback i przeciągnij go do panelu Hierarchia .
  3. Kliknij pozycję InputManager w panelu Hierarchia, a następnie przeciągnij obiekt CursorWithFeedback z hierarchii do pola SimpleSinglePointerSelector menedżera danych InputManager w dolnej części inspektora.
  4. Kliknij pozycję CursorWithFeedback w hierarchii.
  5. W panelu Inspector (Inspektor) rozwiń węzeł Cursor State Data (Dane stanu kursora ) w skrypcie kursora obiektu .

Dane stanu kursora działają następująco:

  • Każdy stan obserwowania oznacza, że żadna ręka nie jest wykrywana, a użytkownik po prostu rozgląda się.
  • Każdy stan interakcji oznacza, że zostanie wykryta ręka lub kontroler.
  • Dowolny stan aktywowania oznacza, że użytkownik patrzy na hologram.

Wdróż i konfiguruj

  • W środowisku Unity użyj ustawień kompilacji plików>, aby ponownie skompilować aplikację.
  • Otwórz folder Aplikacja .
  • Jeśli nie jest jeszcze otwarty, otwórz rozwiązanie ModelExplorer Visual Studio.
    • (Jeśli ten projekt został już skompilowany/wdrożony w programie Visual Studio podczas konfigurowania, możesz otworzyć to wystąpienie programu VS i kliknąć przycisk "Załaduj ponownie wszystko" po wyświetleniu monitu).
  • W programie Visual Studio kliknij pozycję Debuguj —> rozpocznij bez debugowania lub naciśnij klawisze Ctrl + F5.
  • Po wdrożeniu aplikacji na urządzeniu HoloLens odrzuć skrzynkę fitbox przy użyciu gestu naciśnięcia powietrza.
  • Przenieś rękę do widoku i wskaż palcem indeksu na niebo, aby rozpocząć śledzenie rąk.
  • Przenieś rękę w lewo, w prawo, w górę i w dół.
  • Zobacz, jak kursor zmienia się po wykryciu ręki, a następnie utracił widok.
  • Jeśli korzystasz z immersyjnego zestawu słuchawkowego, musisz nawiązać połączenie i odłączyć kontroler. Ta opinia staje się mniej interesująca na urządzeniu immersywnym, ponieważ połączony kontroler zawsze będzie "dostępny".

Rozdział 2 — Nawigacja

Cele

  • Użyj zdarzeń gestów nawigacji, aby obrócić astronautę.

Instrukcje

Aby użyć gestów nawigacji w naszej aplikacji, edytujemy plik GestureAction.cs , aby obracać obiekty po zakończeniu gestu nawigacji. Ponadto dodamy opinię do kursora, aby wyświetlić, gdy nawigacja jest dostępna.

  1. W panelu Hierarchia rozwiń węzeł CursorWithFeedback.
  2. W folderze Holograms znajdź zasóbScrollFeedback .
  3. Przeciągnij i upuść prefabrykat ScrollFeedback na obiekt GameObject CursorWithFeedback w hierarchii.
  4. Kliknij pozycję CursorWithFeedback.
  5. W panelu Inspector (Inspektor) kliknij przycisk Add Component (Dodaj składnik ).
  6. W menu wpisz w polu wyszukiwania CursorFeedback. Wybierz wynik wyszukiwania.
  7. Przeciągnij i upuść obiekt ScrollFeedback z hierarchii na właściwość Scroll Detected Game Object w składniku Opinia kursora w inspektorze.
  8. W panelu Hierarchia wybierz obiekt AstroMan .
  9. W panelu Inspector (Inspektor) kliknij przycisk Add Component (Dodaj składnik ).
  10. W menu wpisz w polu wyszukiwania Akcja gestu. Wybierz wynik wyszukiwania.

Następnie otwórz plik GestureAction.cs w programie Visual Studio. W ćwiczeniu kodowania 2.c zmodyfikuj skrypt, aby wykonać następujące czynności:

  1. Obracanie obiektu AstroMan za każdym razem, gdy jest wykonywany gest nawigacji.
  2. Oblicz wartość rotationFactor , aby kontrolować ilość rotacji zastosowanej do obiektu.
  3. Obracanie obiektu wokół osi y, gdy użytkownik przesuwa rękę w lewo lub w prawo.

Wykonaj ćwiczenia kodowania 2.c w skrypcie lub zastąp kod ukończonym rozwiązaniem poniżej:

using HoloToolkit.Unity.InputModule;
using UnityEngine;

/// <summary>
/// GestureAction performs custom actions based on
/// which gesture is being performed.
/// </summary>
public class GestureAction : MonoBehaviour, INavigationHandler, IManipulationHandler, ISpeechHandler
{
    [Tooltip("Rotation max speed controls amount of rotation.")]
    [SerializeField]
    private float RotationSensitivity = 10.0f;

    private bool isNavigationEnabled = true;
    public bool IsNavigationEnabled
    {
        get { return isNavigationEnabled; }
        set { isNavigationEnabled = value; }
    }

    private Vector3 manipulationOriginalPosition = Vector3.zero;

    void INavigationHandler.OnNavigationStarted(NavigationEventData eventData)
    {
        InputManager.Instance.PushModalInputHandler(gameObject);
    }

    void INavigationHandler.OnNavigationUpdated(NavigationEventData eventData)
    {
        if (isNavigationEnabled)
        {
            /* TODO: DEVELOPER CODING EXERCISE 2.c */

            // 2.c: Calculate a float rotationFactor based on eventData's NormalizedOffset.x multiplied by RotationSensitivity.
            // This will help control the amount of rotation.
            float rotationFactor = eventData.NormalizedOffset.x * RotationSensitivity;

            // 2.c: transform.Rotate around the Y axis using rotationFactor.
            transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
        }
    }

    void INavigationHandler.OnNavigationCompleted(NavigationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void INavigationHandler.OnNavigationCanceled(NavigationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void IManipulationHandler.OnManipulationStarted(ManipulationEventData eventData)
    {
        if (!isNavigationEnabled)
        {
            InputManager.Instance.PushModalInputHandler(gameObject);

            manipulationOriginalPosition = transform.position;
        }
    }

    void IManipulationHandler.OnManipulationUpdated(ManipulationEventData eventData)
    {
        if (!isNavigationEnabled)
        {
            /* TODO: DEVELOPER CODING EXERCISE 4.a */

            // 4.a: Make this transform's position be the manipulationOriginalPosition + eventData.CumulativeDelta
        }
    }

    void IManipulationHandler.OnManipulationCompleted(ManipulationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void IManipulationHandler.OnManipulationCanceled(ManipulationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void ISpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
    {
        if (eventData.RecognizedText.Equals("Move Astronaut"))
        {
            isNavigationEnabled = false;
        }
        else if (eventData.RecognizedText.Equals("Rotate Astronaut"))
        {
            isNavigationEnabled = true;
        }
        else
        {
            return;
        }

        eventData.Use();
    }
}

Zauważysz, że inne zdarzenia nawigacji są już wypełnione informacjami. Wypychamy obiekt GameObject do modalnego stosu InputSystem zestawu narzędzi, więc użytkownik nie musi koncentrować się na astronaucie po rozpoczęciu rotacji. Odpowiednio wyskakujemy obiekt GameObject ze stosu po zakończeniu gestu.

Wdróż i konfiguruj

  1. Ponownie skompiluj aplikację w środowisku Unity, a następnie skompiluj i wdróż ją z poziomu programu Visual Studio, aby uruchomić ją w urządzeniu HoloLens.
  2. Spójrz na astronautę, dwie strzałki powinny pojawić się po obu stronach kursora. Ta nowa wizualizacja wskazuje, że astronauta może być obracany.
  3. Umieść rękę w gotowej pozycji (palec wskazujący na niebo), aby urządzenie HoloLens zaczęło śledzić rękę.
  4. Aby obrócić astronautę, przesuń palcem indeksu do pozycji szczypta, a następnie przenieś rękę w lewo lub w prawo, aby wyzwolić gest NavigationX.

Rozdział 3 — Wskazówki ręczne

Cele

  • Skorzystaj z wyników wskazówek ręcznych , aby pomóc przewidzieć, kiedy śledzenie rąk zostanie utracone.
  • Prześlij opinię na temat kursora, aby pokazać, kiedy ręka użytkownika zbliża się do krawędzi widoku aparatu.

Instrukcje

  1. W panelu Hierarchia wybierz obiekt CursorWithFeedback .
  2. W panelu Inspector (Inspektor) kliknij przycisk Add Component (Dodaj składnik ).
  3. W menu wpisz w polu wyszukiwania Wskazówki dotyczące rąk. Wybierz wynik wyszukiwania.
  4. W folderze Holograms panelu Project znajdź zasóbHandGuidanceFeedback .
  5. Przeciągnij i upuść zasób HandGuidanceFeedback na właściwość Wskaźnik wskazówek ręcznych w panelu Inspektor .

Wdróż i konfiguruj

  • Ponownie skompiluj aplikację w środowisku Unity, a następnie skompiluj i wdróż z programu Visual Studio, aby korzystać z aplikacji na urządzeniu HoloLens.
  • Włóż rękę w widok i podnieś palec indeksu, aby go śledzić.
  • Rozpocznij obracanie astronauty za pomocą gestu nawigacji (uszczypnij palec indeksu i kciuk razem).
  • Przesuń rękę w lewo, w prawo, w górę i w dół.
  • Gdy ręka zbliża się do krawędzi ramki gestu, obok kursora powinna pojawić się strzałka, aby wyświetlić ostrzeżenie, że śledzenie dłoni zostanie utracone. Strzałka wskazuje kierunek przenoszenia ręki, aby zapobiec utracie śledzenia.

Rozdział 4 . Manipulowanie

Cele

  • Użyj zdarzeń manipulowania, aby przenieść astronautę z rękami.
  • Prześlij opinię na temat kursora, aby poinformować użytkownika, kiedy można użyć manipulowania.

Instrukcje

Plik GestManager.cs i AstronautManager.cs umożliwi nam wykonanie następujących czynności:

  1. Użyj słowa kluczowego "Przenieś astronautę", aby włączyć gesty manipulowania i "Obróć astronautę", aby je wyłączyć.
  2. Przejdź do odpowiadania na rozpoznawanie gestów manipulowania.

Zaczynajmy.

  1. W panelu Hierarchia utwórz nowy pusty obiekt GameObject. Nadaj mu nazwę "AstronautManager".
  2. W panelu Inspector (Inspektor) kliknij przycisk Add Component (Dodaj składnik ).
  3. W menu wpisz pole wyszukiwania Astronaut Manager. Wybierz wynik wyszukiwania.
  4. W panelu Inspector (Inspektor) kliknij przycisk Add Component (Dodaj składnik ).
  5. W menu wpisz pole wyszukiwania Źródło danych wejściowych mowy. Wybierz wynik wyszukiwania.

Teraz dodamy polecenia mowy wymagane do kontrolowania stanu interakcji astronauty.

  1. Rozwiń sekcję Słowa kluczowe w inspektorze.
  2. Kliknij ikonę + po prawej stronie, aby dodać nowe słowo kluczowe.
  3. Wpisz słowo kluczowe jako Move Astronaut. Możesz w razie potrzeby dodać skrót klawiszowy.
  4. Kliknij ikonę + po prawej stronie, aby dodać nowe słowo kluczowe.
  5. Wpisz słowo kluczowe jako Obróć astronautę. Możesz w razie potrzeby dodać skrót klawiszowy.
  6. Odpowiedni kod obsługi można znaleźć w pliku GestureAction.cs w procedurze obsługi ISpeechHandler.OnSpeechKeywordRecognized .

Jak skonfigurować źródło danych wejściowych mowy dla rozdziału 4

Następnie skonfigurujemy opinie na temat manipulowania kursorem.

  1. W folderze Hologramy panelu Projektu znajdź zasóbPathingFeedback .
  2. Przeciągnij i upuść prefabryk pathingFeedback na obiekt CursorWithFeedback w hierarchii.
  3. Na panelu Hierarchia kliknij pozycję CursorWithFeedback.
  4. Przeciągnij i upuść obiekt PathingFeedback z hierarchii na właściwość Pathing Detected Game Object w składniku Cursor Feedback w inspektorze.

Teraz musimy dodać kod do pliku GestureAction.cs , aby włączyć następujące elementy:

  1. Dodaj kod do funkcji IManipulationHandler.OnManipulationUpdated , która przeniesie astronautę po wykryciu gestu manipulowania .
  2. Oblicz wektor ruchu , aby określić, gdzie astronauta ma zostać przeniesiony na podstawie położenia ręki.
  3. Przenieś astronautę do nowej pozycji.

Ukończ ćwiczenie kodowania 4.a w pliku GestureAction.cs lub skorzystaj z poniższego ukończonego rozwiązania:

using HoloToolkit.Unity.InputModule;
using UnityEngine;

/// <summary>
/// GestureAction performs custom actions based on
/// which gesture is being performed.
/// </summary>
public class GestureAction : MonoBehaviour, INavigationHandler, IManipulationHandler, ISpeechHandler
{
    [Tooltip("Rotation max speed controls amount of rotation.")]
    [SerializeField]
    private float RotationSensitivity = 10.0f;

    private bool isNavigationEnabled = true;
    public bool IsNavigationEnabled
    {
        get { return isNavigationEnabled; }
        set { isNavigationEnabled = value; }
    }

    private Vector3 manipulationOriginalPosition = Vector3.zero;

    void INavigationHandler.OnNavigationStarted(NavigationEventData eventData)
    {
        InputManager.Instance.PushModalInputHandler(gameObject);
    }

    void INavigationHandler.OnNavigationUpdated(NavigationEventData eventData)
    {
        if (isNavigationEnabled)
        {
            /* TODO: DEVELOPER CODING EXERCISE 2.c */

            // 2.c: Calculate a float rotationFactor based on eventData's NormalizedOffset.x multiplied by RotationSensitivity.
            // This will help control the amount of rotation.
            float rotationFactor = eventData.NormalizedOffset.x * RotationSensitivity;

            // 2.c: transform.Rotate around the Y axis using rotationFactor.
            transform.Rotate(new Vector3(0, -1 * rotationFactor, 0));
        }
    }

    void INavigationHandler.OnNavigationCompleted(NavigationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void INavigationHandler.OnNavigationCanceled(NavigationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void IManipulationHandler.OnManipulationStarted(ManipulationEventData eventData)
    {
        if (!isNavigationEnabled)
        {
            InputManager.Instance.PushModalInputHandler(gameObject);

            manipulationOriginalPosition = transform.position;
        }
    }

    void IManipulationHandler.OnManipulationUpdated(ManipulationEventData eventData)
    {
        if (!isNavigationEnabled)
        {
            /* TODO: DEVELOPER CODING EXERCISE 4.a */

            // 4.a: Make this transform's position be the manipulationOriginalPosition + eventData.CumulativeDelta
            transform.position = manipulationOriginalPosition + eventData.CumulativeDelta;
        }
    }

    void IManipulationHandler.OnManipulationCompleted(ManipulationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void IManipulationHandler.OnManipulationCanceled(ManipulationEventData eventData)
    {
        InputManager.Instance.PopModalInputHandler();
    }

    void ISpeechHandler.OnSpeechKeywordRecognized(SpeechEventData eventData)
    {
        if (eventData.RecognizedText.Equals("Move Astronaut"))
        {
            isNavigationEnabled = false;
        }
        else if (eventData.RecognizedText.Equals("Rotate Astronaut"))
        {
            isNavigationEnabled = true;
        }
        else
        {
            return;
        }

        eventData.Use();
    }
}

Wdróż i konfiguruj

  • Ponownie skompiluj środowisko Unity, a następnie skompiluj i wdróż aplikację z poziomu programu Visual Studio, aby uruchomić aplikację na urządzeniu HoloLens.
  • Przenieś rękę przed urządzeniem HoloLens i podnieś palec wskazujący, aby można go było śledzić.
  • Skoncentruj kursor nad astronautą.
  • Powiedz "Przenieś astronautę", aby przenieść astronautę za pomocą gestu manipulacji.
  • Cztery strzałki powinny pojawić się wokół kursora, aby wskazać, że program będzie teraz reagować na zdarzenia manipulowania.
  • Dojmij palec indeksu do kciuka i utrzymuj je uszczypniętymi razem.
  • W miarę poruszania się ręką astronauta również porusza się (jest to manipulacja).
  • Podnieś palec indeksu, aby zatrzymać manipulowanie astronautą.
  • Uwaga: Jeśli nie mówisz "Przenieś astronautę" przed przeniesieniem ręki, zamiast tego zostanie użyty gest nawigacji.
  • Powiedz "Obróć astronautę", aby powrócić do stanu obrotowego.

Rozdział 5 — Rozszerzanie modelu

Cele

  • Rozwiń model astronauty na wiele, mniejszych elementów, z którymi użytkownik może wchodzić w interakcje.
  • Przenieś każdy element indywidualnie przy użyciu gestów nawigacji i manipulowania.

Instrukcje

W tej sekcji wykonamy następujące zadania:

  1. Dodaj nowe słowo kluczowe "Rozwiń model", aby rozwinąć model astronauty.
  2. Dodaj nowe słowo kluczowe "Resetuj model", aby przywrócić model do oryginalnego formularza.

W tym celu dodamy jeszcze dwa słowa kluczowe do źródła danych wejściowych mowy z poprzedniego rozdziału. Przedstawimy również inny sposób obsługi zdarzeń rozpoznawania.

  1. Kliknij ponownie menedżera astronautów w inspektorze i rozwiń sekcję Słowa kluczowe w inspektorze.
  2. Kliknij ikonę + po prawej stronie, aby dodać nowe słowo kluczowe.
  3. Wpisz słowo kluczowe w polu Rozwiń model. W razie potrzeby możesz dodać skrót klawiszowy.
  4. Kliknij ikonę + po prawej stronie, aby dodać nowe słowo kluczowe.
  5. Wpisz słowo kluczowe jako Resetuj model. W razie potrzeby możesz dodać skrót klawiszowy.
  6. W panelu Inspector (Inspektor ) kliknij przycisk Add Component (Dodaj składnik ).
  7. W menu wpisz ciąg w polu wyszukiwania Program obsługi mowy. Wybierz wynik wyszukiwania.
  8. Zaznacz , czy odbiornik globalny, ponieważ chcemy, aby te polecenia działały niezależnie od obiektu GameObject, którego koncentrujemy.
  9. + Kliknij przycisk i wybierz pozycję Rozwiń model z listy rozwijanej Słowo kluczowe.
  10. Kliknij element w + obszarze Odpowiedź, a następnie przeciągnij element AstronautManager z hierarchii do pola Brak (obiekt ).
  11. Teraz kliknij listę rozwijaną Brak funkcji , wybierz pozycję AstronautManager, a następnie RozwińModelPolecenia.
  12. Kliknij przycisk Program obsługi + danych wejściowych mowy i wybierz pozycję Resetuj model z listy rozwijanej Słowo kluczowe.
  13. Kliknij element w + obszarze Odpowiedź, a następnie przeciągnij element AstronautManager z hierarchii do pola Brak (obiekt ).
  14. Teraz kliknij listę rozwijaną No Function (Brak funkcji ), wybierz pozycję AstronautManager, a następnie ResetModelCommand.

Jak skonfigurować źródło danych wejściowych mowy i program obsługi dla rozdziału 5

Wdróż i konfiguruj

  • Wypróbuj! Skompiluj i wdróż aplikację na urządzeniu HoloLens.
  • Załóżmy , że rozwiń model , aby zobaczyć rozwinięty model astronauty.
  • Użyj nawigacji , aby obrócić poszczególne elementy kombinezonu astronauty.
  • Powiedz move astronauta , a następnie użyj manipulacji , aby przenieść poszczególne kawałki garnituru astronauty.
  • Powiedz rotuj astronautę , aby ponownie obrócić elementy.
  • Powiedzmy Reset Model, aby przywrócić astronautę do pierwotnej formy.

Koniec

Gratulacje! Ukończono funkcję MR Input 211: Gest.

  • Wiesz, jak wykrywać zdarzenia śledzenia rąk, nawigacji i manipulowania nimi oraz reagować na nie.
  • Rozumiesz różnicę między gestami nawigacji i manipulowania.
  • Wiesz, jak zmienić kursor, aby przekazać wizualną opinię, gdy zostanie wykryta ręka, gdy ręka zostanie utracona, oraz kiedy obiekt obsługuje różne interakcje (nawigacja a manipulowanie).