HoloLens (1. Generation) Eingabe 211: Geste

Wichtig

Die Tutorials der Mixed Reality Academy wurden unter Berücksichtigung von HoloLens (1. Generation), Unity 2017 und Mixed Reality Immersive Headsets entwickelt. Daher halten wir es für wichtig, diese Tutorials für Entwickler verfügbar zu halten, die noch nach Anleitung beim Entwickeln für diese Geräte suchen. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden, und sind möglicherweise nicht mit neueren Versionen von Unity kompatibel. Sie werden gewartet, um weiterhin auf den unterstützten Geräten zu funktionieren. Es wurde eine neue Reihe von Tutorials für HoloLens 2 veröffentlicht.

Gesten verwandeln die Absicht des Benutzers in eine Aktion. Mithilfe von Gesten können Benutzer mit Hologrammen interagieren. In diesem Kurs erfahren Sie, wie Sie die Hände des Benutzers nachverfolgen, auf Benutzereingaben reagieren und dem Benutzer Feedback basierend auf dem Handzustand und standort geben.

In MR Basics 101 haben wir eine einfache Luft-Tippen-Geste verwendet, um mit unseren Hologrammen zu interagieren. Nun gehen wir über die Luft-Tippen-Geste hinaus und untersuchen neue Konzepte für Folgendes:

  • Erkennen Sie, wann die Hand des Benutzers nachverfolgt wird, und geben Sie dem Benutzer Feedback.
  • Verwenden Sie eine Navigationsgeste, um unsere Hologramme zu drehen.
  • Geben Sie Feedback, wenn die Hand des Benutzers nicht mehr angezeigt wird.
  • Verwenden Sie Manipulationsereignisse, damit Benutzer Hologramme mit ihren Händen bewegen können.

In diesem Kurs werden wir das Unity-Projekt Model Explorer erneut kennenlernen, das wir in MR Input 210 erstellt haben. Unser Astronautenfreund ist zurück, um uns bei der Erforschung dieser neuen Gestenkonzepte zu unterstützen.

Wichtig

Die in die folgenden Kapitel eingebetteten Videos wurden mit einer älteren Version von Unity und dem Mixed Reality Toolkit aufgezeichnet. Obwohl die Schritt-für-Schritt-Anweisungen genau und aktuell sind, werden möglicherweise Skripts und Visuals in den entsprechenden Videos angezeigt, die veraltet sind. Die Videos bleiben für die Nachwelt und da die behandelten Konzepte weiterhin gelten.

Geräteunterstützung

Kurs HoloLens Immersive Headsets
MR-Eingabe 211: Geste ✔️ ✔️

Vorbereitung

Voraussetzungen

Projektdateien

  • Laden Sie die für das Projekt erforderlichen Dateien herunter. Erfordert Unity 2017.2 oder höher.
  • Heben Sie die Archivierung der Dateien auf Ihrem Desktop oder einem anderen leicht erreichbaren Speicherort auf.

Hinweis

Wenn Sie den Quellcode vor dem Herunterladen durchsuchen möchten, ist er auf GitHub verfügbar.

Errata und Notizen

  • "Nur eigenen Code aktivieren" muss in Visual Studio unter Tools-Options-Debugging>> deaktiviert (deaktiviert) werden, um Haltepunkte im Code zu erreichen.

Kapitel 0: Unity-Setup

Anweisungen

  1. Starten Sie Unity.
  2. Klicken Sie auf Öffnen.
  3. Navigieren Sie zu dem Gestenordner , den Sie zuvor nicht archiviert haben.
  4. Suchen Sie den Ordner Startmodell/Explorer, und wählen Sie sie aus.
  5. Klicken Sie auf die Schaltfläche Ordner auswählen .
  6. Erweitern Sie im Projektbereich den Ordner Szenen .
  7. Doppelklicken Sie auf ModelExplorer-Szene , um sie in Unity zu laden.

Erstellen

  1. Wählen Sie in Unity Dateibuildeinstellungen >aus.
  2. Wenn Scenes/ModelExplorer in Scenes In Build nicht aufgeführt ist, klicken Sie auf Offene Szenen hinzufügen , um die Szene hinzuzufügen.
  3. Wenn Sie speziell für HoloLens entwickeln, legen Sie Zielgerät auf HoloLens fest. Andernfalls behalten Sie die Option "Beliebiges Gerät" bei.
  4. Stellen Sie sicher , dass Buildtyp auf D3D und SDK auf Latest installed (dies sollte SDK 16299 oder höher sein) festgelegt ist.
  5. Klicken Sie auf Erstellen.
  6. Erstellen Sie einen neuen Ordner mit dem Namen "App".
  7. Klicken Sie auf den Ordner App .
  8. Klicken Sie auf Ordner auswählen , und Unity beginnt mit der Erstellung des Projekts für Visual Studio.

Wenn Unity fertig ist, wird ein Explorer Fenster angezeigt.

  1. Öffnen Sie den Ordner App .
  2. Öffnen Sie die Visual Studio-Projektmappe ModelExplorer.

Bei der Bereitstellung in HoloLens:

  1. Ändern Sie mithilfe der oberen Symbolleiste in Visual Studio das Ziel von Debuggen in Release und von ARM in x86.
  2. Klicken Sie auf den Dropdownpfeil neben der Schaltfläche Lokaler Computer, und wählen Sie Remotecomputer aus.
  3. Geben Sie die IP-Adresse Ihres HoloLens-Geräts ein, und legen Sie den Authentifizierungsmodus auf Universal (Unverschlüsseltes Protokoll) fest. Klicken Sie auf Auswählen. Wenn Sie Ihre Geräte-IP-Adresse nicht kennen, suchen Sie unter Einstellungen > Netzwerk & Internet > Erweiterte Optionen.
  4. Klicken Sie in der oberen Menüleiste auf Debuggen –> Ohne Debuggen starten , oder drücken Sie STRG+F5. Wenn sie zum ersten Mal auf Ihrem Gerät bereitgestellt werden, müssen Sie es mit Visual Studio koppeln.
  5. Wenn die App bereitgestellt wurde, schließen Sie das Fitbox-Element mit einer Auswahlgeste.

Bei der Bereitstellung auf einem immersiven Headset:

  1. Ändern Sie mithilfe der oberen Symbolleiste in Visual Studio das Ziel von Debuggen in Release und von ARM in x64.
  2. Stellen Sie sicher, dass das Bereitstellungsziel auf Lokaler Computer festgelegt ist.
  3. Klicken Sie in der oberen Menüleiste auf Debuggen –> Ohne Debuggen starten , oder drücken Sie STRG+F5.
  4. Wenn die App bereitgestellt wurde, schließen Sie die Fitbox , indem Sie den Trigger auf einen Bewegungscontroller ziehen.

Hinweis

Im Bereich "Fehler" von Visual Studio werden möglicherweise einige rote Fehler festgestellt. Es ist sicher, sie zu ignorieren. Wechseln Sie zum Ausgabebereich, um den tatsächlichen Buildfortschritt anzuzeigen. Fehler im Ausgabebereich erfordern eine Korrektur (meistens werden sie durch einen Fehler in einem Skript verursacht).

Kapitel 1: Handgekanntes Feedback

Ziele

  • Abonnieren von Handverfolgungsereignissen.
  • Verwenden Sie Cursorfeedback, um Benutzern anzuzeigen, wann eine Hand nachverfolgt wird.

Hinweis

Auf HoloLens 2 werden immer dann Feuer erkannt, wenn Hände sichtbar sind (nicht nur, wenn ein Finger nach oben zeigt).

Anweisungen

  • Erweitern Sie im Hierarchiebereich das InputManager-Objekt .
  • Suchen Sie nach dem GesturesInput-Objekt , und wählen Sie es aus.

Das Skript InteractionInputSource.cs führt die folgenden Schritte aus:

  1. Abonniert die Ereignisse InteractionSourceDetected und InteractionSourceLost.
  2. Legt den Zustand HandDetected fest.
  3. Gekündigt von den Ereignissen InteractionSourceDetected und InteractionSourceLost.

Als Nächstes aktualisieren wir unseren Cursor von MR Input 210 in einen Cursor, der je nach Den Aktionen des Benutzers Feedback anzeigt.

  1. Wählen Sie im Bereich Hierarchie das Cursor-Objekt aus, und löschen Sie es.
  2. Suchen Sie im Projektbereich nach CursorWithFeedback , und ziehen Sie es in den Hierarchiebereich .
  3. Klicken Sie im Bereich Hierarchie auf InputManager, und ziehen Sie dann das CursorWithFeedback-Objekt aus der Hierarchie in das Cursorfeld des InputManagers SimpleSinglePointerSelector am unteren Rand des Inspektors.
  4. Klicken Sie in der Hierarchie auf CursorWithFeedback.
  5. Erweitern Sie im Inspektorbereichcursor state data (Cursorzustandsdaten ) im Objektcursorskript .

Die Cursorzustandsdaten funktionieren wie folgt:

  • Jeder Observ-Zustand bedeutet, dass keine Hand erkannt wird und der Benutzer einfach umschaut.
  • Jeder Interaktionszustand bedeutet, dass eine Hand oder ein Controller erkannt wird.
  • Jeder Hover-Zustand bedeutet, dass der Benutzer ein Hologramm betrachtet.

Erstellen und Bereitstellen

  • Verwenden Sie in Unity die Dateibuildeinstellungen>, um die Anwendung neu zu erstellen.
  • Öffnen Sie den Ordner App .
  • Wenn sie noch nicht geöffnet ist, öffnen Sie die Visual Studio-Projektmappe ModelExplorer.
    • (Wenn Sie dieses Projekt bereits während der Einrichtung in Visual Studio erstellt/bereitgestellt haben, können Sie diese instance von VS öffnen und bei entsprechender Aufforderung auf "Alle erneut laden" klicken.)
  • Klicken Sie in Visual Studio auf Debuggen –> Ohne Debuggen starten , oder drücken Sie STRG+F5.
  • Nachdem die Anwendung in holoLens bereitgestellt wurde, schließen Sie das Fitboxfeld mit der Lufttastenbewegung.
  • Bewegen Sie Ihre Hand in die Ansicht, und zeigen Sie mit dem Zeigefinger auf den Himmel, um mit der Handverfolgung zu beginnen.
  • Bewegen Sie Ihre Hand nach links, rechts, nach oben und unten.
  • Beobachten Sie, wie sich der Cursor ändert, wenn Ihre Hand erkannt wird und dann aus der Ansicht verloren geht.
  • Wenn Sie ein immersives Headset verwenden, müssen Sie den Controller verbinden und trennen. Dieses Feedback wird auf einem immersiven Gerät weniger interessant, da ein verbundener Controller immer "verfügbar" ist.

Kapitel 2 : Navigation

Ziele

  • Verwenden Sie Navigationsgestenereignisse, um den Astronauten zu drehen.

Anweisungen

Um Navigationsgesten in unserer App zu verwenden, bearbeiten wir GestureAction.cs , um Objekte zu drehen, wenn die Navigationsgeste auftritt. Darüber hinaus fügen wir dem Cursor Feedback hinzu, das angezeigt werden soll, wenn die Navigation verfügbar ist.

  1. Erweitern Sie im HierarchiebereichCursorWithFeedback.
  2. Suchen Sie im Ordner Holograms das Medienobjekt ScrollFeedback .
  3. Ziehen Sie das ScrollFeedback-Prefab auf das CursorWithFeedback GameObject in der Hierarchie.
  4. Klicken Sie auf CursorWithFeedback.
  5. Klicken Sie im Bereich Inspektor auf die Schaltfläche Komponente hinzufügen .
  6. Geben Sie im Menü in das Suchfeld CursorFeedback ein. Wählen Sie das Suchergebnis aus.
  7. Ziehen Sie das ScrollFeedback-Objekt aus der Hierarchie auf die Eigenschaft Scroll Detected Game Object in der CursorFeedback-Komponente im Inspector.
  8. Wählen Sie im Bereich Hierarchie das AstroMan-Objekt aus.
  9. Klicken Sie im Bereich Inspektor auf die Schaltfläche Komponente hinzufügen .
  10. Geben Sie im Menü in das Suchfeld Gestenaktion ein. Wählen Sie das Suchergebnis aus.

Öffnen Sie als Nächstes "GestureAction.cs" in Visual Studio. Bearbeiten Sie in der Codierungsübung 2.c das Skript, um die folgenden Schritte auszuführen:

  1. Drehen Sie das AstroMan-Objekt , wenn eine Navigationsgeste ausgeführt wird.
  2. Berechnen Sie den rotationFactor , um die Auf das Objekt angewendete Drehung zu steuern.
  3. Drehen Sie das Objekt um die y-Achse, wenn der Benutzer seine Hand nach links oder rechts bewegt.

Führen Sie die Codierungsübungen 2.c im Skript durch, oder ersetzen Sie den Code durch die folgende vollständige Projektmappe:

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

Sie werden feststellen, dass die anderen Navigationsereignisse bereits mit einigen Informationen ausgefüllt sind. Wir pushen das GameObject auf den modalen Stapel des Toolkits InputSystem, sodass der Benutzer den Fokus nicht mehr auf den Astronauten behalten muss, sobald die Drehung begonnen hat. Entsprechend wird das GameObject nach Abschluss der Geste aus dem Stapel geschaltet.

Erstellen und Bereitstellen

  1. Erstellen Sie die Anwendung in Unity neu, und erstellen Sie sie dann in Visual Studio, und stellen Sie sie bereit, um sie in holoLens auszuführen.
  2. Wenn Sie den Astronauten anvisieren, sollten zwei Pfeile auf beiden Seiten des Cursors angezeigt werden. Dieses neue Visual zeigt an, dass der Astronaut gedreht werden kann.
  3. Platzieren Sie Ihre Hand in der bereiten Position (Zeigefinger, der auf den Himmel gerichtet ist), damit die HoloLens Ihre Hand nachverfolgen kann.
  4. Um den Astronauten zu drehen, senken Sie den Zeigefinger auf eine zusammendrückende Position, und bewegen Sie die Hand dann nach links oder rechts, um die NavigationX-Geste auszulösen.

Kapitel 3 : Handleitfaden

Ziele

  • Verwenden Sie die Handleitwertung , um vorherzusagen, wann die Handnachverfolgung verloren geht.
  • Geben Sie Feedback für den Cursor an, um anzuzeigen, wenn sich die Hand des Benutzers dem Bildschirmrand der Kamera nähert.

Anweisungen

  1. Wählen Sie im Bereich Hierarchie das CursorWithFeedback-Objekt aus.
  2. Klicken Sie im Bereich Inspektor auf die Schaltfläche Komponente hinzufügen .
  3. Geben Sie im Menü im Suchfeld Handleitfaden ein. Wählen Sie das Suchergebnis aus.
  4. Suchen Sie im Ordner Hologramme im Projektbereich das Objekt HandGuidanceFeedback.
  5. Ziehen Sie das Objekt HandGuidanceFeedback auf die Eigenschaft Hand Guidance Indicator im Inspektorbereich , und legen Sie es ab.

Erstellen und Bereitstellen

  • Erstellen Sie die Anwendung in Unity neu, und erstellen Sie sie dann in Visual Studio, und stellen Sie sie bereit, um die App auf HoloLens zu erleben.
  • Zeigen Sie Ihre Hand an, und heben Sie den Zeigefinger, um nachverfolgt zu werden.
  • Beginnen Sie mit der Navigationsgeste, den Astronauten zu drehen (zusammendrücken Sie Den Zeigefinger und den Daumen zusammendrücken).
  • Bewegen Sie Ihre Hand ganz nach links, rechts, nach oben und nach unten.
  • Wenn sich Ihre Hand dem Rand des Gestenrahmens nähert, sollte ein Pfeil neben dem Cursor angezeigt werden, um Sie zu warnen, dass die Handverfolgung verloren geht. Der Pfeil zeigt an, in welche Richtung Ihre Hand bewegt werden soll, um zu verhindern, dass die Verfolgung verloren geht.

Kapitel 4 : Manipulation

Ziele

  • Verwenden Sie Manipulationsereignisse, um den Astronauten mit Ihren Händen zu bewegen.
  • Geben Sie Feedback zum Cursor, um den Benutzer darüber zu informieren, wann die Manipulation verwendet werden kann.

Anweisungen

GestureManager.cs und AstronautManager.cs ermöglichen uns folgendes:

  1. Verwenden Sie die Spracherkennung Schlüsselwort (keyword) "Astronaut bewegen", um Manipulationsgesten zu aktivieren und "Astronaut rotieren", um sie zu deaktivieren.
  2. Wechseln Sie zur Reaktion auf die Manipulationsgestenerkennung.

Fangen wir also an.

  1. Erstellen Sie im Hierarchiebereich ein neues leeres GameObject. Nennen Sie es "AstronautManager".
  2. Klicken Sie im Bereich Inspektor auf die Schaltfläche Komponente hinzufügen .
  3. Geben Sie im Menü in das Suchfeld Astronaut Manager ein. Wählen Sie das Suchergebnis aus.
  4. Klicken Sie im Bereich Inspektor auf die Schaltfläche Komponente hinzufügen .
  5. Geben Sie im Menü in das Suchfeld Spracheingabequelle ein. Wählen Sie das Suchergebnis aus.

Wir fügen nun die Sprachbefehle hinzu, die zum Steuern des Interaktionszustands des Astronauten erforderlich sind.

  1. Erweitern Sie den Abschnitt Schlüsselwörter im Inspector.
  2. + Klicken Sie auf der rechten Seite, um eine neue Schlüsselwort (keyword) hinzuzufügen.
  3. Geben Sie das Schlüsselwort als Move Astronaut ein. Sie können bei Bedarf eine Tastenkombination hinzufügen.
  4. + Klicken Sie auf der rechten Seite, um eine neue Schlüsselwort (keyword) hinzuzufügen.
  5. Geben Sie das Schlüsselwort als Rotate Astronaut ein. Sie können bei Bedarf eine Tastenkombination hinzufügen.
  6. Der entsprechende Handlercode befindet sich in GestureAction.cs im ISpeechHandler.OnSpeechKeywordRecognized-Handler .

Einrichten der Spracheingabequelle für Kapitel 4

Als Nächstes richten wir das Bearbeitungsfeedback für den Cursor ein.

  1. Suchen Sie im Ordner Holograms des Projektbereichs nach dem Objekt PathingFeedback.
  2. Ziehen Sie das PathingFeedback-Prefab auf das CursorWithFeedback-Objekt in der Hierarchie.
  3. Klicken Sie im Hierarchiebereich auf CursorWithFeedback.
  4. Ziehen Sie das PathingFeedback-Objekt aus der Hierarchie auf die Eigenschaft Pathing Detected Game Object in der Komponente Cursorfeedback im Inspector.

Nun müssen wir "GestureAction.cs " Code hinzufügen, um Folgendes zu aktivieren:

  1. Fügen Sie der Funktion IManipulationHandler.OnManipulationUpdated Code hinzu, die den Astronauten bewegt, wenn eine Manipulationsgeste erkannt wird.
  2. Berechnen Sie den Bewegungsvektor , um basierend auf der Handposition zu bestimmen, wohin der Astronaut bewegt werden soll.
  3. Bewegen Sie den Astronauten in die neue Position.

Schließen Sie die Codierungsübung 4.a in GestureAction.cs ab, oder verwenden Sie unsere vollständige Lösung unten:

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

Erstellen und Bereitstellen

  • Erstellen Sie in Unity neu, und erstellen Sie dann in Visual Studio, und stellen Sie sie bereit, um die App in HoloLens auszuführen.
  • Bewegen Sie Ihre Hand vor die HoloLens, und heben Sie Den Zeigefinger, damit sie nachverfolgt werden kann.
  • Konzentrieren Sie den Cursor auf den Astronauten.
  • Sagen Sie "Astronaut bewegen", um den Astronauten mit einer Manipulationsgeste zu bewegen.
  • Vier Pfeile sollten um den Cursor herum angezeigt werden, um anzugeben, dass das Programm jetzt auf Manipulationsereignisse reagiert.
  • Senken Sie Ihren Zeigefinger auf Ihren Daumen, und halten Sie sie zusammengeklemmt.
  • Wenn Sie Ihre Hand bewegen, wird sich der Astronaut auch bewegen (dies ist Manipulation).
  • Heben Sie Ihren Zeigefinger, um die Manipulation des Astronauten zu beenden.
  • Hinweis: Wenn Sie nicht "Astronaut bewegen" sagen, bevor Sie Ihre Hand bewegen, wird stattdessen die Navigationsgeste verwendet.
  • Sagen Sie "Astronaut rotieren", um in den drehbaren Zustand zurückzukehren.

Kapitel 5: Modellerweiterung

Ziele

  • Erweitern Sie das Astronaut-Modell in mehrere, kleinere Teile, mit denen der Benutzer interagieren kann.
  • Verschieben Sie jedes Stück einzeln mithilfe von Navigations- und Bearbeitungsgesten.

Anweisungen

In diesem Abschnitt führen wir die folgenden Aufgaben aus:

  1. Fügen Sie eine neue Schlüsselwort (keyword) "Modell erweitern" hinzu, um das Astronautenmodell zu erweitern.
  2. Fügen Sie ein neues Schlüsselwort "Modell zurücksetzen" hinzu, um das Modell in sein ursprüngliches Format zurückzugeben.

Dazu fügen Sie der Spracheingabequelle aus dem vorherigen Kapitel zwei weitere Schlüsselwörter hinzu. Wir veranschaulichen auch eine andere Möglichkeit zum Behandeln von Erkennungsereignissen.

  1. Klicken Sie im Inspector zurück auf AstronautManager, und erweitern Sie den Abschnitt Schlüsselwörter im Inspector.
  2. + Klicken Sie auf der rechten Seite, um eine neue Schlüsselwort (keyword) hinzuzufügen.
  3. Geben Sie das Schlüsselwort als Expand Model ein. Sie können bei Bedarf eine Tastenkombination hinzufügen.
  4. + Klicken Sie auf der rechten Seite, um eine neue Schlüsselwort (keyword) hinzuzufügen.
  5. Geben Sie das Schlüsselwort als Modell zurücksetzen ein. Sie können bei Bedarf eine Tastenkombination hinzufügen.
  6. Klicken Sie im Bereich Inspektor auf die Schaltfläche Komponente hinzufügen .
  7. Geben Sie im Menü in das Suchfeld Speech Input Handler ein. Wählen Sie das Suchergebnis aus.
  8. Überprüfen Sie Ist globaler Listener, da diese Befehle unabhängig vom GameObject, auf das wir uns konzentrieren, funktionieren sollen.
  9. Klicken Sie auf die + Schaltfläche, und wählen Sie in der Dropdownliste Schlüsselwort die Option Modell erweitern aus.
  10. Klicken Sie unter Antwort auf die+, und ziehen Sie den AstronautManager aus der Hierarchie in das Feld Keine (Objekt).
  11. Klicken Sie nun auf die Dropdownliste Keine Funktion , wählen Sie AstronautManager und dann ExpandModelCommand aus.
  12. Klicken Sie auf die Schaltfläche Spracheingabehandler, + und wählen Sie in der Dropdownliste Schlüsselwort die Option Modell zurücksetzen aus.
  13. Klicken Sie unter Antwort auf die+, und ziehen Sie den AstronautManager aus der Hierarchie in das Feld Keine (Objekt).
  14. Klicken Sie nun auf die Dropdownliste Keine Funktion , wählen Sie AstronautManager und dann ResetModelCommand aus.

Einrichten der Spracheingabequelle und des Handlers für Kapitel 5

Erstellen und Bereitstellen

  • Testen Erstellen sie die App, und stellen Sie sie in HoloLens bereit.
  • Sagen Sie Modell erweitern , um das erweiterte Astronautenmodell anzuzeigen.
  • Verwenden Sie die Navigation , um einzelne Teile des Astronautenanzugs zu drehen.
  • Sagen Sie Move Astronaut und verwenden Sie dann Manipulation , um einzelne Teile des Astronautenanzugs zu bewegen.
  • Sagen Sie Rotieren Sie Astronaut , um die Teile erneut zu drehen.
  • Sagen Sie Modell zurücksetzen , um den Astronauten in seine ursprüngliche Form zurückzusetzen.

Das Ende

Herzlichen Glückwunsch! Sie haben jetzt MR Input 211: Geste abgeschlossen.

  • Sie wissen, wie Sie Handverfolgungs-, Navigations- und Manipulationsereignisse erkennen und darauf reagieren.
  • Sie verstehen den Unterschied zwischen Navigations- und Manipulationsgesten.
  • Sie wissen, wie Sie den Cursor ändern, um visuelles Feedback zu geben, wenn eine Hand erkannt wird, wenn eine Hand verloren geht, und wenn ein Objekt verschiedene Interaktionen unterstützt (Navigation im Vergleich zur Bearbeitung).