HoloLens (1e generatie) Invoer 211: Beweging

Belangrijk

De Mixed Reality Academy-zelfstudies zijn ontworpen met HoloLens (1e generatie), Unity 2017 en Mixed Reality Immersive Headsets in het achterhoofd. Daarom vinden we het belangrijk om deze zelfstudies te laten staan voor ontwikkelaars die nog steeds op zoek zijn naar richtlijnen bij het ontwikkelen van deze apparaten. Deze zelfstudies worden niet bijgewerkt met de nieuwste toolsets of interacties die worden gebruikt voor HoloLens 2 en zijn mogelijk niet compatibel met nieuwere versies van Unity. Ze worden onderhouden om te blijven werken op de ondersteunde apparaten. Er is een nieuwe reeks zelfstudies gepubliceerd voor HoloLens 2.

Bewegingen zetten de intentie van de gebruiker om in actie. Met bewegingen kunnen gebruikers werken met hologrammen. In deze cursus leert u hoe u de handen van de gebruiker kunt volgen, reageren op gebruikersinvoer en feedback kunt geven aan de gebruiker op basis van de handstatus en locatie.

In MR Basics 101 hebben we een eenvoudige luchttikbeweging gebruikt om te communiceren met onze hologrammen. Nu gaan we verder dan de beweging voor luchttikken en verkennen we nieuwe concepten voor het volgende:

  • Detecteer wanneer de hand van de gebruiker wordt gevolgd en geef de gebruiker feedback.
  • Gebruik een navigatiebeweging om de hologrammen te draaien.
  • Feedback geven wanneer de hand van de gebruiker op het punt staat uit het zicht te gaan.
  • Gebruik manipulatie-gebeurtenissen om gebruikers toe te staan hologrammen met hun handen te verplaatsen.

In deze cursus gaan we terug naar het Unity-project Model Explorer, dat we hebben gebouwd in MR Input 210. Onze astronautenvriend is terug om ons te helpen bij het verkennen van deze nieuwe gebaarconcepten.

Belangrijk

De video's die in elk van de onderstaande hoofdstukken zijn ingesloten, zijn opgenomen met behulp van een oudere versie van Unity en de Mixed Reality Toolkit. Hoewel de stapsgewijze instructies nauwkeurig en actueel zijn, ziet u mogelijk scripts en visuals in de bijbehorende video's die verouderd zijn. De video's blijven opgenomen voor het nageslacht en omdat de behandelde concepten nog steeds van toepassing zijn.

Ondersteuning voor apparaten

Cursus HoloLens Immersive headsets
MR-invoer 211: Gebaar ✔️ ✔️

Voordat u begint

Vereisten

Projectbestanden

  • Download de bestanden die zijn vereist voor het project. Vereist Unity 2017.2 of hoger.
  • Maak het archiveren van de bestanden op uw bureaublad of een andere gemakkelijk te bereiken locatie ongedaan.

Notitie

Als u de broncode wilt bekijken voordat u deze downloadt, is deze beschikbaar op GitHub.

Errata en notities

  • 'Alleen mijn code inschakelen' moet worden uitgeschakeld (uitgeschakeld) in Visual Studio onder Extra-Opties-Foutopsporing>> om onderbrekingspunten in uw code te bereiken.

Hoofdstuk 0 - Unity-installatie

Instructies

  1. Start Unity.
  2. Selecteer Openen.
  3. Navigeer naar de map Beweging die u eerder hebt verwijderd.
  4. Zoek en selecteer de mapModelverkenner/ starten.
  5. Klik op de knop Map selecteren .
  6. Vouw in het deelvenster Project de map Scènes uit .
  7. Dubbelklik op de scène ModelExplorer om deze te laden in Unity.

Gebouw

  1. Selecteer in Unity Instellingen voor bestandsbuild>.
  2. Als Scenes/ModelExplorer niet wordt vermeld in Scènes in build, klikt u op Open scènes toevoegen om de scène toe te voegen.
  3. Als u specifiek ontwikkelt voor HoloLens, stelt u Doelapparaat in op HoloLens. Anders laat u deze op Elk apparaat staan.
  4. Zorg ervoor dat Buildtype is ingesteld op D3D en SDK is ingesteld op Laatst geïnstalleerd (dit moet SDK 16299 of nieuwer zijn).
  5. Klik op Bouwen.
  6. Maak een nieuwe map met de naam 'App'.
  7. Klik één klik op de map App .
  8. Druk op Map selecteren en Unity begint met het bouwen van het project voor Visual Studio.

Wanneer Unity klaar is, wordt een Bestandenverkenner venster weergegeven.

  1. Open de map App .
  2. Open de Visual Studio-oplossing ModelExplorer.

Als u implementeert op HoloLens:

  1. Gebruik de bovenste werkbalk in Visual Studio om het doel te wijzigen van Foutopsporing in Release en van ARM in x86.
  2. Klik op de vervolgkeuzepijl naast de knop Lokale computer en selecteer Externe computer.
  3. Voer het IP-adres van uw HoloLens-apparaat in en stel Verificatiemodus in op Universeel (Niet-versleuteld protocol). Klik op Selecteren. Als u het IP-adres van uw apparaat niet weet, kijkt u in Instellingen > Netwerk & Geavanceerde opties voor internet>.
  4. Klik in de bovenste menubalk op Fouten opsporen -> Starten zonder foutopsporing of druk op Ctrl+ F5. Als dit de eerste keer is dat u op uw apparaat implementeert, moet u het koppelen met Visual Studio.
  5. Wanneer de app is geïmplementeerd, sluit u fitbox met een selectiebeweging.

Als u implementeert op een immersive headset:

  1. Gebruik de bovenste werkbalk in Visual Studio om het doel te wijzigen van Foutopsporing in Release en van ARM in x64.
  2. Zorg ervoor dat het implementatiedoel is ingesteld op Lokale computer.
  3. Klik in de bovenste menubalk op Fouten opsporen -> Starten zonder foutopsporing of druk op Ctrl+ F5.
  4. Wanneer de app is geïmplementeerd, sluit u de Fitbox door de trigger op een bewegingscontroller over te halen.

Notitie

Mogelijk ziet u rode fouten in het deelvenster Visual Studio-fouten. Het is veilig om ze te negeren. Ga naar het deelvenster Uitvoer om de werkelijke voortgang van de build weer te geven. Voor fouten in het deelvenster Uitvoer moet u een oplossing maken (meestal worden deze veroorzaakt door een fout in een script).

Hoofdstuk 1 - Hand gedetecteerde feedback

Doelen

  • Abonneren op handtraceringsevenementen.
  • Gebruik cursorfeedback om gebruikers te laten zien wanneer een hand wordt gevolgd.

Notitie

Op HoloLens 2 gedetecteerd dat handen branden wanneer handen zichtbaar zijn (niet alleen wanneer een vinger omhoog wijst).

Instructies

  • Vouw in het deelvenster Hierarchy het object InputManager uit.
  • Zoek en selecteer het object GesturesInput .

Het script InteractionInputSource.cs voert de volgende stappen uit:

  1. Abonneert u op de gebeurtenissen InteractionSourceDetected en InteractionSourceLost.
  2. Hiermee stelt u de status HandDetected in.
  3. Afmeldt voor de gebeurtenissen InteractionSourceDetected en InteractionSourceLost.

Vervolgens upgraden we de cursor van MR-invoer 210 naar een die feedback weergeeft, afhankelijk van de acties van de gebruiker.

  1. Selecteer in het deelvenster Hiërarchie het cursorobject en verwijder het.
  2. Zoek in het deelvenster Project naar CursorWithFeedback en sleep deze naar het deelvenster Hiërarchie .
  3. Klik op InputManager in het deelvenster Hierarchy en sleep vervolgens het cursorWithFeedback-object van de hiërarchie naar het veld Cursor van SimpleSinglePointerSelector van InputManager, onderaan de Inspector.
  4. Klik op de CursorWithFeedback in de hiërarchie.
  5. Vouw in het deelvenster Inspectorde optie Cursorstatusgegevens uit in het script Objectcursor .

De cursorstatusgegevens werken als volgt:

  • Een Observe-status betekent dat er geen hand wordt gedetecteerd en dat de gebruiker gewoon rondk kijkt.
  • Elke Interact-status betekent dat er een hand of controller wordt gedetecteerd.
  • Een aanwijsstatus betekent dat de gebruiker een hologram bekijkt.

Bouwen en implementeren

  • Gebruik in Unity Instellingen voor bestandsbuild > om de toepassing opnieuw te bouwen.
  • Open de map App .
  • Als deze nog niet is geopend, opent u de Visual Studio-oplossing ModelExplorer.
    • (Als u dit project al hebt gebouwd/geïmplementeerd in Visual Studio tijdens de installatie, kunt u dat exemplaar van VS openen en op Alles opnieuw laden klikken wanneer u hierom wordt gevraagd).
  • Klik in Visual Studio op Foutopsporing -> Starten zonder foutopsporing of druk op Ctrl + F5.
  • Nadat de toepassing is geïmplementeerd op de HoloLens, sluit u de fitbox met behulp van het beweging voor luchttikken.
  • Verplaats uw hand in beeld en richt uw wijsvinger naar de hemel om te beginnen met handtracering.
  • Beweeg je hand naar links, rechts, omhoog en omlaag.
  • Bekijk hoe de cursor verandert wanneer uw hand wordt gedetecteerd en vervolgens uit het zicht wordt verloren.
  • Als u een immersive headset gebruikt, moet u verbinding maken met de controller en de verbinding verbreken. Deze feedback wordt minder interessant op een immersive apparaat, omdat een aangesloten controller altijd 'beschikbaar' is.

Hoofdstuk 2 - Navigatie

Doelen

  • Gebruik navigatiebewegingsgebeurtenissen om de astronaut te draaien.

Instructies

Als u navigatiebewegingen in onze app wilt gebruiken, gaan we GestureAction.cs bewerken om objecten te draaien wanneer de navigatiebeweging plaatsvindt. Daarnaast voegen we feedback toe aan de cursor om weer te geven wanneer navigatie beschikbaar is.

  1. Vouw cursorWithFeedback uit in het deelvenster Hiërarchie.
  2. Zoek in de map Holograms de asset ScrollFeedback .
  3. Sleep de scrollfeedback-prefab naar het CursorWithFeedback-gameobject in de hiërarchie.
  4. Klik op CursorWithFeedback.
  5. Klik in het deelvenster Inspector op de knop Onderdeel toevoegen .
  6. Typ in het menu in het zoekvak CursorFeedback. Selecteer het zoekresultaat.
  7. Sleep het scrollFeedback-object van de hiërarchie naar de eigenschap Scroll Detected Game Object in het onderdeel Cursor Feedback in de Inspector.
  8. Selecteer in het deelvenster Hierarchy het object AstroMan .
  9. Klik in het deelvenster Inspector op de knop Onderdeel toevoegen .
  10. Typ in het menu in het zoekvak Beweging actie. Selecteer het zoekresultaat.

Open vervolgens GestureAction.cs in Visual Studio. In codeeroefening 2.c bewerkt u het script om het volgende te doen:

  1. Draai het AstroMan-object wanneer een navigatiebeweging wordt uitgevoerd.
  2. Bereken de rotationFactor om de hoeveelheid rotatie te bepalen die op het object wordt toegepast.
  3. Draai het object rond de y-as wanneer de gebruiker de hand naar links of rechts verplaatst.

Voltooi codeeroefeningen 2.c in het script of vervang de code door de voltooide oplossing hieronder:

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

U ziet dat de andere navigatiegebeurtenissen al zijn ingevuld met bepaalde gegevens. We pushen het GameObject naar de modale stack van inputsystem van de toolkit, zodat de gebruiker zich niet hoeft te concentreren op de Astronaut zodra de rotatie is gestart. Zodra het gebaar is voltooid, wordt het GameObject van de stapel gehaald.

Bouwen en implementeren

  1. Bouw de toepassing opnieuw in Unity en bouw en implementeer deze vanuit Visual Studio om deze uit te voeren in de HoloLens.
  2. Staar naar de astronaut, twee pijlen moeten aan weerszijden van de cursor verschijnen. Deze nieuwe visual geeft aan dat de astronaut kan worden gedraaid.
  3. Plaats uw hand in de gereedheid (wijsvinger wijst naar de hemel) zodat de HoloLens uw hand gaat volgen.
  4. Als u de astronaut wilt draaien, verlaagt u uw wijsvinger in een knijppositie en beweegt u vervolgens uw hand naar links of rechts om het NavigationX-gebaar te activeren.

Hoofdstuk 3 - Handrichtlijnen

Doelen

  • Gebruik handhulpscore om te voorspellen wanneer handtracering verloren gaat.
  • Geef feedback over de cursor om weer te geven wanneer de hand van de gebruiker de camerarand nadert.

Instructies

  1. Selecteer in het deelvenster Hierarchy het object CursorWithFeedback .
  2. Klik in het deelvenster Inspector op de knop Onderdeel toevoegen .
  3. Typ in het menu in het zoekvak Handrichtlijnen. Selecteer het zoekresultaat.
  4. Zoek in de map Hologrammen van het deelvenster Project de asset HandGuidanceFeedback.
  5. Sleep de asset HandGuidanceFeedback naar de eigenschap Handrichtlijnenindicator in het deelvenster Inspector .

Bouwen en implementeren

  • Bouw de toepassing opnieuw in Unity en bouw en implementeer vervolgens vanuit Visual Studio om de app op HoloLens te ervaren.
  • Breng uw hand in beeld en til uw wijsvinger op om bij te houden.
  • Begin met het draaien van de astronaut met het navigatiegebaar (knijp uw wijsvinger en duim naar elkaar toe).
  • Beweeg je hand naar links, rechts, omhoog en omlaag.
  • Als uw hand de rand van het gebaarframe nadert, wordt er een pijl naast de cursor weergegeven om u te waarschuwen dat handtracering verloren gaat. De pijl geeft aan in welke richting u uw hand moet bewegen om te voorkomen dat tracking verloren gaat.

Hoofdstuk 4 - Manipulatie

Doelen

  • Gebruik manipulatie-gebeurtenissen om de astronaut met uw handen te verplaatsen.
  • Geef feedback over de cursor om de gebruiker te laten weten wanneer manipulatie kan worden gebruikt.

Instructies

Met GestureManager.cs en AstronautManager.cs kunnen we het volgende doen:

  1. Gebruik het trefwoord 'Astronaut verplaatsen' om manipulatiebewegingen in te schakelen en 'Astronaut draaien' om ze uit te schakelen.
  2. Schakel over om te reageren op de manipulatiebewegingsherkenning.

Aan de slag.

  1. Maak in het deelvenster Hierarchy een nieuw leeg GameObject. Geef deze de naam AstronautManager.
  2. Klik in het deelvenster Inspector op de knop Onderdeel toevoegen .
  3. Typ in het menu in het zoekvak Astronaut Manager. Selecteer het zoekresultaat.
  4. Klik in het deelvenster Inspector op de knop Onderdeel toevoegen .
  5. Typ in het menu in het zoekvak Spraakinvoerbron. Selecteer het zoekresultaat.

We voegen nu de spraakopdrachten toe die nodig zijn om de interactiestatus van de astronaut te beheren.

  1. Vouw de sectie Trefwoorden in de Inspector uit.
  2. Klik op de + aan de rechterkant om een nieuw trefwoord toe te voegen.
  3. Typ het trefwoord als Verplaatsings astronaut. U kunt desgewenst een toetscombinatie toevoegen.
  4. Klik op de + aan de rechterkant om een nieuw trefwoord toe te voegen.
  5. Typ het Trefwoord als Astronaut draaien. U kunt desgewenst een toetscombinatie toevoegen.
  6. De bijbehorende handlercode vindt u in GestureAction.cs, in de handler ISpeechHandler.OnSpeechKeywordRecognized .

De spraakinvoerbron instellen voor hoofdstuk 4

Vervolgens stellen we de feedback over het bewerken van de cursor in.

  1. Zoek in de map Hologrammen van het deelvenster Project de asset PathingFeedback.
  2. Sleep de prefab PathingFeedback naar het object CursorWithFeedback in de hiërarchie.
  3. Klik in het deelvenster Hiërarchie op CursorWithFeedback.
  4. Sleep het object PathingFeedback vanuit de hiërarchie naar de eigenschap Pathing Detected Game Object in het onderdeel Cursor Feedback in de Inspector.

Nu moeten we code toevoegen aan GestureAction.cs om het volgende in te schakelen:

  1. Voeg code toe aan de functie IManipulationHandler.OnManipulationUpdated , waarmee de astronaut wordt verplaatst wanneer een manipulatiebeweging wordt gedetecteerd.
  2. Bereken de bewegingsvector om te bepalen waar de astronaut naartoe moet worden verplaatst op basis van de handpositie.
  3. Verplaats de astronaut naar de nieuwe positie.

Voltooi codeeroefening 4.a in GestureAction.cs of gebruik de onderstaande voltooide oplossing:

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

Bouwen en implementeren

  • Bouw de app opnieuw op in Unity en bouw en implementeer vervolgens vanuit Visual Studio om de app uit te voeren in HoloLens.
  • Beweeg uw hand voor de HoloLens en til uw wijsvinger op zodat deze kan worden gevolgd.
  • Richt de cursor op de astronaut.
  • Zeg 'Move Astronaut' om de astronaut te verplaatsen met een manipulatiebeweging.
  • Er moeten vier pijlen rond de cursor worden weergegeven om aan te geven dat het programma nu reageert op manipulatie-gebeurtenissen.
  • Laat uw wijsvinger omlaag naar uw duim en houd ze samengekneld.
  • Als je je hand rond beweegt, zal de astronaut ook bewegen (dit is Manipulatie).
  • Til je wijsvinger op om te stoppen met het manipuleren van de astronaut.
  • Opmerking: Als u niet 'Move Astronaut' zegt voordat u uw hand beweegt, wordt in plaats daarvan het navigatiegebaar gebruikt.
  • Zeg 'Astronaut draaien' om terug te keren naar de draaibare status.

Hoofdstuk 5 - Modeluitbreiding

Doelen

  • Breid het Astronaut-model uit in meerdere, kleinere onderdelen waarmee de gebruiker kan communiceren.
  • Verplaats elk onderdeel afzonderlijk met navigatie- en manipulatiebewegingen.

Instructies

In deze sectie voeren we de volgende taken uit:

  1. Voeg een nieuw trefwoord 'Model uitvouwen' toe om het astronautenmodel uit te vouwen.
  2. Voeg een nieuw trefwoord 'Model opnieuw instellen' toe om het model terug te zetten in de oorspronkelijke vorm.

We doen dit door nog twee trefwoorden toe te voegen aan de spraakinvoerbron uit het vorige hoofdstuk. We laten ook een andere manier zien om herkenningsevenementen af te handelen.

  1. Klik terug op AstronautManager in de Inspector en vouw de sectie Trefwoorden in de Inspector uit.
  2. Klik op de + aan de rechterkant om een nieuw trefwoord toe te voegen.
  3. Typ het Trefwoord als Model uitvouwen. U kunt desgewenst een toetscombinatie toevoegen.
  4. Klik op de + aan de rechterkant om een nieuw trefwoord toe te voegen.
  5. Typ het Trefwoord als Model opnieuw instellen. U kunt desgewenst een toetscombinatie toevoegen.
  6. Klik in het deelvenster Inspector op de knop Onderdeel toevoegen .
  7. Typ in het menu in het zoekvak Spraakinvoerhandler. Selecteer het zoekresultaat.
  8. Schakel Is globale listener in, omdat we willen dat deze opdrachten werken, ongeacht de GameObject die we richten.
  9. Klik op de + knop en selecteer Model uitvouwen in de vervolgkeuzelijst Trefwoord.
  10. Klik op de + onder Antwoord en sleep de AstronautManager van de hiërarchie naar het veld Geen (object).
  11. Klik nu op de vervolgkeuzelijst Geen functie , selecteer AstronautManager en vervolgens ExpandModelCommand.
  12. Klik op de knop Van de spraakinvoerhandler + en selecteer Model opnieuw instellen in de vervolgkeuzelijst Trefwoord.
  13. Klik op de + onder Antwoord en sleep de AstronautManager van de hiërarchie naar het veld Geen (object).
  14. Klik nu op de vervolgkeuzelijst Geen functie , selecteer AstronautManager en vervolgens ResetModelOpdracht.

De spraakinvoerbron en -handler instellen voor hoofdstuk 5

Bouwen en implementeren

  • Probeer het nu! Bouw en implementeer de app op de HoloLens.
  • Zeg Model uitvouwen om het uitgebreide astronautenmodel te bekijken.
  • Gebruik Navigatie om afzonderlijke onderdelen van het astronautenpak te draaien.
  • Zeg Move Astronaut en gebruik manipulatie om afzonderlijke stukken van het astronautenpak te verplaatsen.
  • Zeg Astronaut draaien om de onderdelen opnieuw te draaien.
  • Zeg Model opnieuw instellen om de astronaut terug te zetten naar de oorspronkelijke vorm.

Het einde

Gefeliciteerd U hebt nu MR-invoer 211: Gebaar voltooid.

  • U weet hoe u handtracerings-, navigatie- en manipulatie-gebeurtenissen kunt detecteren en erop kunt reageren.
  • U begrijpt het verschil tussen navigatie- en manipulatiebewegingen.
  • U weet hoe u de cursor kunt wijzigen om visuele feedback te geven over wanneer een hand wordt gedetecteerd, wanneer een hand op het punt staat verloren te gaan en wanneer een object verschillende interacties ondersteunt (navigatie versus manipulatie).