MR-Eingabe 211: GesteMR Input 211: Gesture

Hinweis

Die Tutorials der Mixed Reality Academy wurden im Hinblick auf HoloLens (1. Gen.) und immersive Mixed Reality-Headsets entworfen.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. 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.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Sie werden gewartet, um weiterhin auf den unterstützten Geräten zu funktionieren.They will be maintained to continue working on the supported devices. Es wurde eine neue Reihe von Tutorials für HoloLens 2 veröffentlicht.A new series of tutorials has been posted for HoloLens 2.

Gesten verwandeln die Benutzer Absicht in eine Aktion.Gestures turn user intention into action. Mithilfe von Gesten können Benutzer mit Hologrammen interagieren.With gestures, users can interact with holograms. In diesem Kurs erfahren Sie, wie Sie die Hände des Benutzers nachverfolgen, auf Benutzereingaben reagieren und dem Benutzer Feedback geben können, der auf dem Hand Bundesland und-Speicherort basiert.In this course, we'll learn how to track the user's hands, respond to user input, and give feedback to the user based on hand state and location.

In den Grundlagen 101haben wir eine einfache Air-Tap-Geste verwendet, um mit unseren holograms zu interagieren.In MR Basics 101, we used a simple air-tap gesture to interact with our holograms. Nun gehen wir über die Luft tippen Bewegung hinaus und erforschen neue Konzepte für Folgendes:Now, we'll move beyond the air-tap gesture and explore new concepts to:

  • Erkennen, wenn die Hand des Benutzers nachverfolgt wird, und Senden von Feedback an den Benutzer.Detect when the user's hand is being tracked and provide feedback to the user.
  • Verwenden Sie eine Navigations Geste, um unsere Hologramme zu drehen.Use a navigation gesture to rotate our holograms.
  • Geben Sie uns Feedback, wenn der Benutzer die Hand verlässt.Provide feedback when the user's hand is about to go out of view.
  • Verwenden Sie Manipulations Ereignisse, um Benutzern das Verschieben von holograms mit ihren Händen zu ermöglichen.Use manipulation events to allow users to move holograms with their hands.

In diesem Kurs besuchen wir den Unity-Projekt Modell-Explorer, den wir in der Eingabe 210erstellt haben.In this course, we'll revisit the Unity project Model Explorer, which we built in MR Input 210. Unser Astronauten Freund ist zurück, um uns bei der Untersuchung dieser neuen Gesten Konzepte zu unterstützen.Our astronaut friend is back to assist us in our exploration of these new gesture concepts.

Wichtig

Die in den folgenden Kapiteln eingebetteten Videos wurden mit einer älteren Version von Unity und dem Mixed Reality Toolkit aufgezeichnet.The videos embedded in each of the chapters below were recorded using an older version of Unity and the Mixed Reality Toolkit. Die Schritt-für-Schritt-Anweisungen sind genau und aktuell, aber es werden möglicherweise Skripts und Visualisierungen in den entsprechenden Videos angezeigt, die veraltet sind.While the step-by-step instructions are accurate and current, you may see scripts and visuals in the corresponding videos that are out-of-date. Die Videos bleiben in der einwelt enthalten und werden weiterhin angewendet.The videos remain included for posterity and because the concepts covered still apply.

GeräteunterstützungDevice support

KursCourse HoloLensHoloLens Immersive HeadsetsImmersive headsets
MR-Eingabe 211: GesteMR Input 211: Gesture ✔️✔️ ✔️✔️

VorbereitungBefore you start

VoraussetzungenPrerequisites

ProjektdateienProject files

  • Herunterladen der Dateien , die für das Projekt erforderlich sind.Download the files required by the project. Erfordert Unity 2017,2 oder höher.Requires Unity 2017.2 or later.
  • Deinstallieren Sie die Dateien auf Ihrem Desktop oder an einem anderen leicht zugänglichen Speicherort.Un-archive the files to your desktop or other easy to reach location.

Hinweis

Wenn Sie den Quellcode vor dem herunterladen durchsuchen möchten, ist er auf GitHub verfügbar.If you want to look through the source code before downloading, it's available on GitHub.

Errata und NotizenErrata and Notes

  • "Enable nur eigenen Code" muss in Visual Studio unter "Extras->Optionen" deaktiviert werden (> Debuggen, um Breakpoints im Code zu erreichen."Enable Just My Code" needs to be disabled (unchecked) in Visual Studio under Tools->Options->Debugging in order to hit breakpoints in your code.

Kapitel 0: Einrichtung von UnityChapter 0 - Unity Setup

InstructionsInstructions

  1. Starten Sie Unity.Start Unity.
  2. Wählen Sie Open(Öffnen).Select Open.
  3. Navigieren Sie zu dem Gesten Ordner, den Sie zuvor nicht archiviert haben.Navigate to the Gesture folder you previously un-archived.
  4. Suchen und wählen Sie den Start / Modell-Explorer -Ordner aus.Find and select the Starting/Model Explorer folder.
  5. Klicken Sie auf die Schaltfläche Ordner auswählen .Click the Select Folder button.
  6. Erweitern Sie im Projekt Panel den Ordner Szenen .In the Project panel, expand the Scenes folder.
  7. Doppelklicken Sie auf Model Explorer Scene, um es in Unity zu laden.Double-click ModelExplorer scene to load it in Unity.

ErstellenBuilding

  1. Wählen Sie in Unity Datei > Buildeinstellungen aus.In Unity, select File > Build Settings.
  2. Wenn Szenen/Model Explorer nicht in Szenen im Build aufgeführt ist, klicken Sie auf offene Szenen hinzufügen , um die Szene hinzuzufügen.If Scenes/ModelExplorer is not listed in Scenes In Build, click Add Open Scenes to add the scene.
  3. Wenn Sie speziell für hololens entwickeln, legen Sie Zielgerät auf hololens fest.If you're specifically developing for HoloLens, set Target device to HoloLens. Andernfalls sollten Sie es auf jedem Gerät belassen.Otherwise, leave it on Any device.
  4. Stellen Sie sicher, dass der Buildtyp auf D3D und das SDK auf Latest installiert festgelegt ist (was SDK 16299 oder höher sein sollte).Ensure Build Type is set to D3D and SDK is set to Latest installed (which should be SDK 16299 or newer).
  5. Klicken Sie auf Erstellen.Click Build.
  6. Erstellen Sie einen neuen Ordner mit dem Namen "App".Create a New Folder named "App".
  7. Klicken Sie einfach auf den App -Ordner.Single click the App folder.
  8. Klicken Sie auf Ordner auswählen , und Unity startet das Projekt für Visual Studio.Press Select Folder and Unity will start building the project for Visual Studio.

Wenn Unity abgeschlossen ist, wird ein Datei-Explorer-Fenster angezeigt.When Unity is done, a File Explorer window will appear.

  1. Öffnen Sie den App -Ordner.Open the App folder.
  2. Öffnen Sie die Visual Studio-Projekt Mappe Model Explorer.Open the ModelExplorer Visual Studio Solution.

Bei der Bereitstellung in hololens:If deploying to HoloLens:

  1. Ändern Sie das Ziel mithilfe der oberen Symbolleiste in Visual Studio von Debug in Release und von Arm in x86.Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to x86.
  2. Klicken Sie auf den Dropdown Pfeil neben der Schaltfläche lokaler Computer, und wählen Sie Remote Computer aus.Click on the drop down arrow next to the Local Machine button, and select Remote Machine.
  3. Geben Sie die IP-Adresse des hololens-Geräts ein, und legen Sie den Authentifizierungsmodus auf Universal (unverschlüsseltes Protokoll)Enter your HoloLens device IP address and set Authentication Mode to Universal (Unencrypted Protocol). Klicken Sie auf Auswählen.Click Select. Wenn Sie die IP-Adresse Ihres Geräts nicht kennen, suchen Sie unter Einstellungen > Netzwerk & Internet > Erweiterte Optionen.If you do not know your device IP address, look in Settings > Network & Internet > Advanced Options.
  4. Klicken Sie in der oberen Menüleiste auf Debuggen-> starten ohne Debugging , oder drücken Sie STRG + F5.In the top menu bar, click Debug -> Start Without debugging or press Ctrl + F5. Wenn Sie die Bereitstellung auf Ihrem Gerät zum ersten Mal durchführt, müssen Sie es mit Visual Studiokoppeln.If this is the first time deploying to your device, you will need to pair it with Visual Studio.
  5. Wenn die APP bereitgestellt wurde, schließen Sie das fitbox -Gerät mit einer Auswahl Bewegung ab.When the app has deployed, dismiss the Fitbox with a select gesture.

Bei der Bereitstellung auf einem immersiven Headset:If deploying to an immersive headset:

  1. Ändern Sie das Ziel mithilfe der oberen Symbolleiste in Visual Studio von Debug in Release und von Arm in x64.Using the top toolbar in Visual Studio, change the target from Debug to Release and from ARM to x64.
  2. Stellen Sie sicher, dass das Bereitstellungs Ziel auf lokaler Computer festgelegt ist.Make sure the deployment target is set to Local Machine.
  3. Klicken Sie in der oberen Menüleiste auf Debuggen-> starten ohne Debugging , oder drücken Sie STRG + F5.In the top menu bar, click Debug -> Start Without debugging or press Ctrl + F5.
  4. Wenn die APP bereitgestellt wurde, schließen Sie die Funktion , indem Sie den- Typ auf einen Bewegungs Controller ziehen.When the app has deployed, dismiss the Fitbox by pulling the trigger on a motion controller.

Hinweis

Im Visual Studio-Fehler Panel werden möglicherweise einige rote Fehler feststellen.You might notice some red errors in the Visual Studio Errors panel. Es ist sicher, Sie zu ignorieren.It is safe to ignore them. Wechseln Sie zum Ausgabebereich, um den tatsächlichen buildfortschritt anzuzeigen.Switch to the Output panel to view actual build progress. Fehler im Ausgabe Panel erfordern eine Korrektur (meistens werden Sie durch einen Fehler in einem Skript verursacht).Errors in the Output panel will require you to make a fix (most often they are caused by a mistake in a script).

Kapitel 1: Hand erkanntes FeedbackChapter 1 - Hand detected feedback

ZieleObjectives

  • Hiermit werden die Hand Verfolgungs Ereignisse abonniert.Subscribe to hand tracking events.
  • Mit Cursor Feedback können Sie Benutzer anzeigen, wenn eine Hand nachverfolgt wird.Use cursor feedback to show users when a hand is being tracked.

Hinweis

Bei hololens 2 werden Hände erkannt, wenn die Hände sichtbar sind (nicht nur, wenn ein Finger nach oben zeigt).On HoloLens 2 , hands detected fires whenever hands are visible (not just when a finger is pointing up).

InstructionsInstructions

  • Erweitern Sie im Bereich Hierarchie das InputManager -Objekt.In the Hierarchy panel, expand the InputManager object.
  • Suchen Sie nach dem gesturesinput -Objekt, und wählen Sie es aus.Look for and select the GesturesInput object.

Das Skript InteractionInputSource.cs führt folgende Schritte aus:The InteractionInputSource.cs script performs these steps:

  1. Abonniert das interaktionsourceerkannte-Ereignis und das interaktionsourcelost-Ereignis.Subscribes to the InteractionSourceDetected and InteractionSourceLost events.
  2. Legt den handerkannten Zustand fest.Sets the HandDetected state.
  3. Abonniert die Ereignisse interaktionsourceerkannte und interaktionsourcelost.Unsubscribes from the InteractionSourceDetected and InteractionSourceLost events.

Als nächstes aktualisieren wir den Cursor von der Mr-Eingabe 210 in einen, der das Feedback abhängig von den Aktionen des Benutzers anzeigt.Next, we'll upgrade our cursor from MR Input 210 into one that shows feedback depending on the user's actions.

  1. Wählen Sie im Bereich Hierarchie das Cursor Objekt aus, und löschen Sie es.In the Hierarchy panel, select the Cursor object and delete it.
  2. Suchen Sie im Projekt Panel nach currsorwithfeedback , und ziehen Sie es in den Bereich Hierarchie .In the Project panel, search for CursorWithFeedback and drag it into the Hierarchy panel.
  3. Klicken Sie im Hierarchie Panel auf InputManager , und ziehen Sie dann das cursorwithfeedback -Objekt aus der Hierarchie in das Cursor Feld simplesinglepointerselector von InputManager am unteren Rand des Inspektors.Click on InputManager in the Hierarchy panel, then drag the CursorWithFeedback object from the Hierarchy into the InputManager's SimpleSinglePointerSelector's Cursor field, at the bottom of the Inspector.
  4. Klicken Sie in der Hierarchie auf das Cursor-Feedback .Click on the CursorWithFeedback in the Hierarchy.
  5. Erweitern Sie im Inspektor -Panel Cursor Zustandsdaten für das Objekt Cursor Skript.In the Inspector panel, expand Cursor State Data on the Object Cursor script.

Die Cursor Zustandsdaten funktionieren wie folgt:The Cursor State Data works like this:

  • Jeder Status der Überprüfung bedeutet, dass keine Hand erkannt wird und der Benutzer einfach eine Suche durchführt.Any Observe state means that no hand is detected and the user is simply looking around.
  • Jeder Interaktions Zustand bedeutet, dass eine Hand oder ein Controller erkannt wird.Any Interact state means that a hand or controller is detected.
  • Jeder Hover -Zustand bedeutet, dass der Benutzer ein Hologram ansieht.Any Hover state means the user is looking at a hologram.

Erstellen und BereitstellenBuild and Deploy

  • Verwenden Sie in Unity Datei > Buildeinstellungen , um die Anwendung neu zu erstellen.In Unity, use File > Build Settings to rebuild the application.
  • Öffnen Sie den App -Ordner.Open the App folder.
  • Öffnen Sie die Visual Studio-Projekt Mappe Model Explorer, wenn Sie nicht bereits geöffnet ist.If it's not already open, open the ModelExplorer Visual Studio Solution.
    • (Wenn Sie dieses Projekt bereits während der Einrichtung in Visual Studio erstellt bzw. bereitgestellt haben, können Sie diese Instanz von Visual Studio öffnen und auf "alles neu laden" klicken).(If you already built/deployed this project in Visual Studio during set-up, then you can open that instance of VS and click 'Reload All' when prompted).
  • Klicken Sie in Visual Studio auf Debuggen-> starten ohne Debugging , oder drücken Sie STRG + F5.In Visual Studio, click Debug -> Start Without debugging or press Ctrl + F5.
  • Nachdem die Anwendung in den hololens bereitgestellt wurde, schließen Sie die fitbox mithilfe der Tastenkombination.After the application deploys to the HoloLens, dismiss the fitbox using the air-tap gesture.
  • Bewegen Sie die Hand in die Anzeige, und zeigen Sie den Finger des Indexes auf den Himmel, um die Hand Verfolgung zu startenMove your hand into view and point your index finger to the sky to start hand tracking.
  • Bewegen Sie Ihre Hand nach links, nach rechts, nach oben und unten.Move your hand left, right, up and down.
  • Sehen Sie sich an, wie sich der Cursor ändert, wenn Ihre Hand erkannt wird, und dann in der Ansicht verlorenWatch how the cursor changes when your hand is detected and then lost from view.
  • Wenn Sie sich auf einem immersiven Headset befinden, müssen Sie eine Verbindung herstellen und den Controller trennen.If you're on an immersive headset, you'll have to connect and disconnect your controller. Dieses Feedback wird auf einem immersiven Gerät weniger interessant, da ein verbundener Controller immer "verfügbar" ist.This feedback becomes less interesting on an immersive device, as a connected controller will always be "available".

Kapitel 2: NavigationChapter 2 - Navigation

ZieleObjectives

  • Verwenden Sie Navigations Gesten Ereignisse, um den Astronaut zu drehen.Use Navigation gesture events to rotate the astronaut.

InstructionsInstructions

Um Navigations Gesten in unserer APP zu verwenden, bearbeiten wir GestureAction.cs , um Objekte zu drehen, wenn die Navigations Bewegung auftritt.To use Navigation gestures in our app, we are going to edit GestureAction.cs to rotate objects when the Navigation gesture occurs. Außerdem wird dem Cursor Feedback hinzugefügt, das angezeigt wird, wenn die Navigation verfügbar ist.Additionally, we'll add feedback to the cursor to display when Navigation is available.

  1. Erweitern Sie im Bereich Hierarchie den Eintrag Cursor-Feedback.In the Hierarchy panel, expand CursorWithFeedback.
  2. Suchen Sie im Ordner holograms das scrollfeedback -Medienobjekt.In the Holograms folder, find the ScrollFeedback asset.
  3. Ziehen Sie die scrollfeedback -vorfab per Drag & amp; Drop auf das Cursor Objekt in der Hierarchie.Drag and drop the ScrollFeedback prefab onto the CursorWithFeedback GameObject in the Hierarchy.
  4. Klicken Sie auf currsorwithfeedback.Click on CursorWithFeedback.
  5. Klicken Sie im Inspektor -Panel auf die Schaltfläche Komponente hinzufügen .In the Inspector panel, click the Add Component button.
  6. Geben Sie im Menü den Suchbegriff Cursor Feedback ein.In the menu, type in the search box CursorFeedback. Wählen Sie das Suchergebnis aus.Select the search result.
  7. Ziehen Sie das scrollfeedback -Objekt mithilfe von Drag & amp; Drop aus der- Hierarchie in der Cursor-Feedback Komponente des Inspektors auf die Eigenschaft Bild Lauf Erkennung erkanntDrag and drop the ScrollFeedback object from the Hierarchy onto the Scroll Detected Game Object property in the Cursor Feedback component in the Inspector.
  8. Wählen Sie im Bereich Hierarchie das Objekt Astroman aus.In the Hierarchy panel, select the AstroMan object.
  9. Klicken Sie im Inspektor -Panel auf die Schaltfläche Komponente hinzufügen .In the Inspector panel, click the Add Component button.
  10. Geben Sie im Menü die Aktion in der Aktion Suchfeld ein.In the menu, type in the search box Gesture Action. Wählen Sie das Suchergebnis aus.Select the search result.

Öffnen Sie als nächstes GestureAction.cs in Visual Studio.Next, open GestureAction.cs in Visual Studio. Bearbeiten Sie in der Codierungs Übung 2. c das Skript, um Folgendes durchzuführen:In coding exercise 2.c, edit the script to do the following:

  1. Drehen Sie das Astroman -Objekt immer dann, wenn eine Navigations Geste ausgeführt wird.Rotate the AstroMan object whenever a Navigation gesture is performed.
  2. Berechnen Sie den " rotationfactor ", um die auf das Objekt angewendete Drehung zu steuern.Calculate the rotationFactor to control the amount of rotation applied to the object.
  3. Drehen Sie das Objekt um die y-Achse, wenn der Benutzer seine Hand nach links oder rechts verschiebt.Rotate the object around the y-axis when the user moves their hand left or right.

Vervollständigen Sie die Codierungs Übungen 2. c im Skript, oder ersetzen Sie den Code durch die folgende abgeschlossene Lösung:Complete coding exercises 2.c in the script, or replace the code with the completed solution below:

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 Navigations Ereignisse bereits mit einigen Informationen ausgefüllt sind.You'll notice that the other navigation events are already filled in with some info. Wir schieben das gameobject-Objekt auf den modalen Stapel des Toolkits, sodass der Benutzer den Fokus nicht mehr auf dem Astronaut behalten muss, sobald die Drehung begonnen hat.We push the GameObject onto the Toolkit's InputSystem's modal stack, so the user doesn't have to maintain focus on the Astronaut once rotation has begun. Dementsprechend wird das gameobject aus dem Stapel entfernt, sobald die Geste abgeschlossen ist.Correspondingly, we pop the GameObject off the stack once the gesture is completed.

Erstellen und BereitstellenBuild and Deploy

  1. Erstellen Sie die Anwendung in Unity neu, erstellen Sie Sie, und stellen Sie Sie aus Visual Studio bereit, um Sie in den hololens auszuführen.Rebuild the application in Unity and then build and deploy from Visual Studio to run it in the HoloLens.
  2. Blick auf den Astronaut, zwei Pfeile sollten auf beiden Seiten des Cursors angezeigt werden.Gaze at the astronaut, two arrows should appear on either side of the cursor. Dieses neue visuelle Element gibt an, dass der Astronaut gedreht werden kann.This new visual indicates that the astronaut can be rotated.
  3. Legen Sie die Hand an der Position an der Position (Index fingerbild, die auf den Himmel zeigt), sodass die hololens Ihre Hand nachverfolgen werden.Place your hand in the ready position (index finger pointed towards the sky) so the HoloLens will start tracking your hand.
  4. Um den Astronaut zu drehen, verringern Sie den Finger des Indexes an eine Position, und verschieben Sie dann die Hand nach links oder rechts, um die navigationx-Geste zu initiieren.To rotate the astronaut, lower your index finger to a pinch position, and then move your hand left or right to trigger the NavigationX gesture.

Kapitel 3-Hand-AnleitungenChapter 3 - Hand Guidance

ZieleObjectives

  • Verwenden Sie die Hand Leit Faden Bewertung , um vorherzusagen, wann die Hand Verfolgung verloren geht.Use hand guidance score to help predict when hand tracking will be lost.
  • Geben Sie Feedback zu dem Cursor an, der angezeigt wird, wenn die Hand des Benutzers den Rand der Ansicht der Kamera anzeigt.Provide feedback on the cursor to show when the user's hand nears the camera's edge of view.

InstructionsInstructions

  1. Wählen Sie im Bereich Hierarchie das Cursor -Objekt aus.In the Hierarchy panel, select the CursorWithFeedback object.
  2. Klicken Sie im Inspektor -Panel auf die Schaltfläche Komponente hinzufügen .In the Inspector panel, click the Add Component button.
  3. Geben Sie im Menü den Hand Leit Faden für das Suchfeld ein.In the menu, type in the search box Hand Guidance. Wählen Sie das Suchergebnis aus.Select the search result.
  4. Suchen Sie im Projekt Panel holograms -Ordner das handguidancefeedback -Asset.In the Project panel Holograms folder, find the HandGuidanceFeedback asset.
  5. Ziehen Sie das Objekt handguidancefeedback per Drag & Drop auf die Eigenschaft Hand Leit Faden Anzeige im Inspektor -Panel.Drag and drop the HandGuidanceFeedback asset onto the Hand Guidance Indicator property in the Inspector panel.

Erstellen und BereitstellenBuild and Deploy

  • Erstellen Sie die Anwendung in Unity neu, erstellen Sie Sie in Visual Studio, und stellen Sie Sie bereit, um die APP auf hololens zu erlebenRebuild the application in Unity and then build and deploy from Visual Studio to experience the app on HoloLens.
  • Zeigen Sie Ihre Hand an, und heben Sie den Index Finger auf, um nachverfolgt zu werden.Bring your hand into view and raise your index finger to get tracked.
  • Beginnen Sie mit dem Drehen des Astronauten mit der Navigations Bewegung (drücken Sie den Finger und den Ziehpunkt des Indexes zusammen).Start rotating the astronaut with the Navigation gesture (pinch your index finger and thumb together).
  • Verschieben Sie Ihre Hand ganz nach links, nach rechts, nach oben und nach unten.Move your hand far left, right, up, and down.
  • Wenn die Kante des Gesten Rahmens in der Hand dargestellt wird, sollte neben dem Cursor ein Pfeil angezeigt werden, der Sie darüber informiert, dass die Hand Verfolgung verloren geht.As your hand nears the edge of the gesture frame, an arrow should appear next to the cursor to warn you that hand tracking will be lost. Der Pfeil gibt die Richtung an, in der die Hand bewegt werden soll, um zu verhindern, dass die Überwachung verloren geht.The arrow indicates which direction to move your hand in order to prevent tracking from being lost.

Kapitel 4: BearbeitungChapter 4 - Manipulation

ZieleObjectives

  • Verwenden Sie Manipulations Ereignisse, um den Astronaut mit ihren Händen zu verschieben.Use Manipulation events to move the astronaut with your hands.
  • Geben Sie Feedback für den Cursor an, damit der Benutzer weiß, wann die Bearbeitung verwendet werden kann.Provide feedback on the cursor to let the user know when Manipulation can be used.

InstructionsInstructions

Mit GestureManager.cs und AstronautManager.cs können wir folgende Aktionen ausführen:GestureManager.cs and AstronautManager.cs will allow us to do the following:

  1. Verwenden Sie das Speech-Schlüsselwort "Move Astronaut", um Manipulations Gesten zu aktivieren und "Astronaut" zu deaktivieren, um Sie zu deaktivieren.Use the speech keyword "Move Astronaut" to enable Manipulation gestures and "Rotate Astronaut" to disable them.
  2. Wechseln Sie zur Reaktion auf die Erkennungs Gestenerkennung.Switch to responding to the Manipulation Gesture Recognizer.

Fangen wir also an.Let's get started.

  1. Erstellen Sie im Hierarchie Panel ein neues leeres gameobject-Objekt.In the Hierarchy panel, create a new empty GameObject. Nennen Sie es "astronautmanager".Name it "AstronautManager".
  2. Klicken Sie im Inspektor -Panel auf die Schaltfläche Komponente hinzufügen .In the Inspector panel, click the Add Component button.
  3. Geben Sie im Menü im Suchfeld den Suchbegriff " Astronaut Manager" ein.In the menu, type in the search box Astronaut Manager. Wählen Sie das Suchergebnis aus.Select the search result.
  4. Klicken Sie im Inspektor -Panel auf die Schaltfläche Komponente hinzufügen .In the Inspector panel, click the Add Component button.
  5. Geben Sie im Menü die Eingabe Quelle für die Suchbegriff Sprache ein.In the menu, type in the search box Speech Input Source. Wählen Sie das Suchergebnis aus.Select the search result.

Nun fügen wir die Sprachbefehle hinzu, die erforderlich sind, um den Interaktions Zustand des Astronauten zu steuern.We'll now add the speech commands required to control the interaction state of the astronaut.

  1. Erweitern Sie im Inspektor den Abschnitt Schlüsselwörter .Expand the Keywords section in the Inspector.
  2. Klicken Sie + auf der rechten Seite, um ein neues Schlüsselwort hinzuzufügen.Click the + on the right hand side to add a new keyword.
  3. Geben Sie das Schlüsselwort als Move Astronaut ein.Type the Keyword as Move Astronaut. Wenn gewünscht, können Sie eine Tastenkombination hinzufügen.Feel free to add a Key Shortcut if desired.
  4. Klicken Sie + auf der rechten Seite, um ein neues Schlüsselwort hinzuzufügen.Click the + on the right hand side to add a new keyword.
  5. Geben Sie das Schlüsselwort zum Drehen des Astronauten ein.Type the Keyword as Rotate Astronaut. Wenn gewünscht, können Sie eine Tastenkombination hinzufügen.Feel free to add a Key Shortcut if desired.
  6. Der entsprechende Handlercode finden Sie in GestureAction.cs im iredner Handler. onredner keywordrecognized -Handler.The corresponding handler code can be found in GestureAction.cs, in the ISpeechHandler.OnSpeechKeywordRecognized handler.

Einrichten der Spracheingabe Quelle für Kapitel 4

Als nächstes richten wir das Manipulations Feedback für den Cursor ein.Next, we'll setup the manipulation feedback on the cursor.

  1. Suchen Sie im Projekt Panel holograms -Ordner das pathingfeedback -Asset.In the Project panel Holograms folder, find the PathingFeedback asset.
  2. Ziehen Sie die vorfab pathingfeedback per Drag & amp; Drop auf das Cursor Objekt in der Hierarchie.Drag and drop the PathingFeedback prefab onto the CursorWithFeedback object in the Hierarchy.
  3. Klicken Sie im Hierarchie Panel auf " Cursor".In the Hierarchy panel, click on CursorWithFeedback.
  4. Ziehen Sie das pathingfeedback -Objekt per Drag & amp; Drop aus der- Hierarchie auf die Eigenschaft für die Eigenschaft "" für das festgelegte Spiel im Inspektor.Drag and drop the PathingFeedback object from the Hierarchy onto the Pathing Detected Game Object property in the Cursor Feedback component in the Inspector.

Nun müssen Sie GestureAction.cs Code hinzufügen, um Folgendes zu ermöglichen:Now we need to add code to GestureAction.cs to enable the following:

  1. Fügen Sie der imanipulationhandler. onmanipulationaktualisierte -Funktion Code hinzu, mit dem der Astronaut verschoben wird, wenn eine Manipulations Bewegung erkannt wird.Add code to the IManipulationHandler.OnManipulationUpdated function, which will move the astronaut when a Manipulation gesture is detected.
  2. Berechnen Sie den Bewegungsvektor , um zu bestimmen, an welcher Stelle der Astronaut auf der Grundlage der Handposition verschoben werden soll.Calculate the movement vector to determine where the astronaut should be moved to based on hand position.
  3. Verschieben Sie den Astronauten an die neue Position.Move the astronaut to the new position.

Vervollständigen Sie die Codierungs Übung 4. a in GestureAction.cs, oder verwenden Sie unten unsere abgeschlossene Lösung:Complete coding exercise 4.a in GestureAction.cs, or use our completed solution below:

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 BereitstellenBuild and Deploy

  • Erstellen Sie in Unity neu, und erstellen Sie Sie aus Visual Studio, um die app in hololens auszuführen.Rebuild in Unity and then build and deploy from Visual Studio to run the app in HoloLens.
  • Bewegen Sie Ihre Hand vor den hololens, und erhöhen Sie den Indexfinger, damit er nachverfolgt werden kann.Move your hand in front of the HoloLens and raise your index finger so that it can be tracked.
  • Fokussieren Sie den Cursor auf den Astronaut.Focus the cursor over the astronaut.
  • Nehmen Sie an, Sie können den Astronauten mit einer Manipulations Bewegung verschieben.Say 'Move Astronaut' to move the astronaut with a Manipulation gesture.
  • Im Cursor sollten vier Pfeile angezeigt werden, um anzugeben, dass das Programm nun auf Manipulations Ereignisse antwortet.Four arrows should appear around the cursor to indicate that the program will now respond to Manipulation events.
  • Verringern Sie den Finger des Indexes auf Ihren Ziehpunkt, und halten Sie ihn zusammen.Lower your index finger down to your thumb, and keep them pinched together.
  • Wenn Sie die Hand herum bewegen, wird der Astronaut ebenfalls verschoben (Dies ist eine Bearbeitung).As you move your hand around, the astronaut will move too (this is Manipulation).
  • Erhöhen Sie den Finger des Indexes, um die Bearbeitung des Astronauten zu verhindern.Raise your index finger to stop manipulating the astronaut.
  • Hinweis: Wenn Sie "Move Astronaut" nicht vor Hand bewegen, wird stattdessen die Navigations Geste verwendet.Note: If you do not say 'Move Astronaut' before moving your hand, then the Navigation gesture will be used instead.
  • Nehmen wir an, dass Sie den "Astronaut" drehen, um zum rotatable-Status zurückSay 'Rotate Astronaut' to return to the rotatable state.

Kapitel 5: Modell ErweiterungChapter 5 - Model expansion

ZieleObjectives

  • Erweitern Sie das Modell "Astronaut" in mehrere kleinere Teile, mit denen der Benutzer interagieren kann.Expand the Astronaut model into multiple, smaller pieces that the user can interact with.
  • Verschieben Sie jedes Stück einzeln mithilfe von Navigations-und Bearbeitungs Gesten.Move each piece individually using Navigation and Manipulation gestures.

InstructionsInstructions

In diesem Abschnitt werden die folgenden Aufgaben ausgeführt:In this section, we will accomplish the following tasks:

  1. Fügen Sie ein neues Schlüsselwort "Expand Model" hinzu, um das Modell des Astronauten zu erweitern.Add a new keyword "Expand Model" to expand the astronaut model.
  2. Fügen Sie ein neues Schlüsselwort "Modell zurücksetzen" hinzu, um das Modell in seine ursprüngliche Form zurückzugeben.Add a new Keyword "Reset Model" to return the model to its original form.

Hierzu fügen wir der Spracheingabe Quelle aus dem vorherigen Kapitel zwei weitere Schlüsselwörter hinzu.We'll do this by adding two more keywords to the Speech Input Source from the previous chapter. Wir veranschaulichen auch eine weitere Möglichkeit, Erkennungs Ereignisse zu behandeln.We'll also demonstrate another way to handle recognition events.

  1. Klicken Sie im Inspektor auf " astronautmanager ", und erweitern Sie im Inspektor den Abschnitt " Schlüsselwörter ".Click back on AstronautManager in the Inspector and expand the Keywords section in the Inspector.
  2. Klicken Sie + auf der rechten Seite, um ein neues Schlüsselwort hinzuzufügen.Click the + on the right hand side to add a new keyword.
  3. Geben Sie das Schlüsselwort als Erweiterungs Modell ein.Type the Keyword as Expand Model. Wenn gewünscht, können Sie eine Tastenkombination hinzufügen.Feel free to add a Key Shortcut if desired.
  4. Klicken Sie + auf der rechten Seite, um ein neues Schlüsselwort hinzuzufügen.Click the + on the right hand side to add a new keyword.
  5. Geben Sie das Schlüsselwort als Modell zurücksetzen ein.Type the Keyword as Reset Model. Wenn gewünscht, können Sie eine Tastenkombination hinzufügen.Feel free to add a Key Shortcut if desired.
  6. Klicken Sie im Inspektor -Panel auf die Schaltfläche Komponente hinzufügen .In the Inspector panel, click the Add Component button.
  7. Geben Sie im Menü den Eingabe Handler für die Suchbegriff Sprache ein.In the menu, type in the search box Speech Input Handler. Wählen Sie das Suchergebnis aus.Select the search result.
  8. Überprüfen Sie, ob es sich um einen globalen Listener handelt, da Sie möchten, dass diese Befehle unabhängig vom verwendeten gameobject funktionieren.Check Is Global Listener, since we want these commands to work regardless of the GameObject we're focusing.
  9. Klicken Sie auf die + Schaltfläche, und wählen Sie Modell aus der Dropdown Liste Schlüsselwort erweiternClick the + button and select Expand Model from the Keyword dropdown.
  10. Klicken Sie + unter Antwort auf den Wert, und ziehen Sie den Wert von astronautmanager aus der Hierarchie in das Feld None (Object) .Click the + under Response, and drag the AstronautManager from the Hierarchy into the None (Object) field.
  11. Klicken Sie nun auf die Dropdown Liste keine Funktion , und wählen Sie dann " astronautmanager" und " expandmodelcommand"Now, click the No Function dropdown, select AstronautManager, then ExpandModelCommand.
  12. Klicken Sie auf die Schaltfläche des Spracheingabe Handlers, + und wählen Sie im Dropdown Menü Schlüsselwort Zurücksetzen ausClick the Speech Input Handler's + button and select Reset Model from the Keyword dropdown.
  13. Klicken Sie + unter Antwort auf den Wert, und ziehen Sie den Wert von astronautmanager aus der Hierarchie in das Feld None (Object) .Click the + under Response, and drag the AstronautManager from the Hierarchy into the None (Object) field.
  14. Klicken Sie nun auf die Dropdown Liste keine Funktion , und wählen Sie dann " astronautmanager" und dann " resetmodelcommand"Now, click the No Function dropdown, select AstronautManager, then ResetModelCommand.

Einrichten der Spracheingabe Quelle und des Handlers für Kapitel 5

Erstellen und BereitstellenBuild and Deploy

  • TestenTry it! Erstellen Sie die APP, und stellen Sie Sie in den hololens bereit.Build and deploy the app to the HoloLens.
  • Beispiel: Erweitern Sie Modell , um das erweiterte Modell des Astronauten anzuzeigen.Say Expand Model to see the expanded astronaut model.
  • Verwenden Sie die Navigation , um einzelne Teile der astronautenfarbe zu drehen.Use Navigation to rotate individual pieces of the astronaut suit.
  • Nehmen Sie an, Sie können den Astronauten verschieben und dann die Bearbeitung verwenden, um einzelne Teile des Astronauten zu verschieben.Say Move Astronaut and then use Manipulation to move individual pieces of the astronaut suit.
  • Nehmen Sie an, Sie können den Astronauten rotieren , um die TeileSay Rotate Astronaut to rotate the pieces again.
  • Nehmen Sie beispielsweise Reset Model an, um den Astronaut an seine ursprüngliche Form zurückzugeben.Say Reset Model to return the astronaut to its original form.

Das EndeThe End

Herzlichen Glückwunsch!Congratulations! Sie haben nun die Eingabe 211: Geste abgeschlossen.You have now completed MR Input 211: Gesture.

  • Sie wissen, wie Hand Verfolgungs-, Navigations-und Bearbeitungs Ereignisse erkannt und beantwortet werden.You know how to detect and respond to hand tracking, navigation and manipulation events.
  • Sie verstehen den Unterschied zwischen Navigation und Manipulations Gesten.You understand the difference between Navigation and Manipulation gestures.
  • Sie wissen, wie Sie den Cursor so ändern können, dass er visuelles Feedback bereitstellt, wenn eine Hand entdeckt wird, wenn eine Hand verloren geht, und für den Fall, dass ein Objekt verschiedene Interaktionen unterstützt (Navigation und Bearbeitung).You know how to change the cursor to provide visual feedback for when a hand is detected, when a hand is about to be lost, and for when an object supports different interactions (Navigation vs Manipulation).