MR-Grundlagen 101: Vollständiges Projekt mit GerätMR Basics 101: Complete project with device


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.


In diesem Tutorial werden Sie durch ein vollständiges Projekt geführt, das in Unity integriert ist, das grundlegende Windows Mixed Reality-Features in hololens veranschaulicht, einschließlich Blick, Gesten, Spracheingabe, räumlicher Sound und räumlicher Zuordnung.This tutorial will walk you through a complete project, built in Unity, that demonstrates core Windows Mixed Reality features on HoloLens including gaze, gestures, voice input, spatial sound and spatial mapping.

Das Tutorial dauert ungefähr 1 Stunde.The tutorial will take approximately 1 hour to complete.

GeräteunterstützungDevice support

KursCourse HoloLensHoloLens Immersive HeadsetsImmersive headsets
MR-Grundlagen 101: Vollständiges Projekt mit GerätMR Basics 101: Complete project with device ✔️✔️

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.
    • Wenn Sie weiterhin Unity 5,6-Unterstützung benötigen, verwenden Sie Diese Version.If you still need Unity 5.6 support, please use this release.
    • Wenn Sie weiterhin Unity 5,5-Unterstützung benötigen, verwenden Sie Diese Version.If you still need Unity 5.5 support, please use this release.
    • Wenn Sie weiterhin Unity 5,4-Unterstützung benötigen, verwenden Sie Diese Version.If you still need Unity 5.4 support, please use this release.
  • 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. Behalten Sie den Ordnernamen Origami bei.Keep the folder name as Origami.

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.

Kapitel 1: "Holo" WorldChapter 1 - "Holo" world

In diesem Kapitel richten wir das erste Unity-Projekt ein und durchlaufen den Build-und Bereitstellungs Prozess.In this chapter, we'll setup our first Unity project and step through the build and deploy process.

ZieleObjectives

  • Einrichten von Unity für die Holographic-Entwicklung.Set up Unity for holographic development.
  • Erstellen Sie ein Hologram.Make a hologram.
  • Sehen Sie sich ein von Ihnen vorgenommene – Hologramm an.See a hologram that you made.

InstructionsInstructions

  • Starten Sie Unity.Start Unity.
  • Wählen Sie Open(Öffnen).Select Open.
  • Geben Sie Location als den Ordner Origami ein, den Sie zuvor nicht archiviert haben.Enter location as the Origami folder you previously un-archived.
  • Wählen Sie Origami , und klicken Sie auf Ordner auswählen.Select Origami and click Select Folder.
  • Da das Origami -Projekt keine Szene enthält, speichern Sie die leere Standard Szene in einer neuen Datei: File / Save scene as.Since the Origami project does not contain a scene, save the empty default scene to a new file using: File / Save Scene As.
  • Nennen Sie die neue Szene Origami , und klicken Sie auf die Schaltfläche Speichern .Name the new scene Origami and press the Save button.

Einrichten der virtuellen HauptkameraSetup the main virtual camera

  • Wählen Sie im Hierarchiebereich die Option Hauptkamera aus.In the Hierarchy Panel, select Main Camera.
  • Legen Sie im Inspektor die Transformations Position auf 0, 0, 0 fest.In the Inspector set its transform position to 0,0,0.
  • Suchen Sie die Eigenschaft Clear Flags , und ändern Sie die Dropdown Liste von Skybox in voll Tonfarbe.Find the Clear Flags property, and change the dropdown from Skybox to Solid color.
  • Klicken Sie auf das Feld Hintergrund, um eine Farbauswahl zu öffnen.Click on the Background field to open a color picker.
  • Legen Sie R, G, B und A auf 0 fest.Set R, G, B, and A to 0.

Einrichten der SzeneSetup the scene

  • Klicken Sie im Hierarchie Panel auf Erstellen , und erstellen Sie eine leere.In the Hierarchy Panel, click on Create and Create Empty.
  • Klicken Sie mit der rechten Maustaste auf das neue gameobject und wählen Sie umbenennenRight-click the new GameObject and select Rename. Benennen Sie das gameobject in origamicollection um.Rename the GameObject to OrigamiCollection.
  • Wählen Sie im Projekt Panel im Ordner holograms (Objekte erweitern und holograms aus, oder Doppelklicken Sie im Projekt Panel auf den Ordner holograms):From the Holograms folder in the Project Panel (expand Assets and select Holograms or double click the Holograms folder in the Project Panel):
    • Ziehen Sie die Phase in die Hierarchie, um ein untergeordnetes Element von origamicollection zu sein.Drag Stage into the Hierarchy to be a child of OrigamiCollection.
    • Ziehen Sie Sphere1 in die Hierarchie, um ein untergeordnetes Element von origamicollection zu sein.Drag Sphere1 into the Hierarchy to be a child of OrigamiCollection.
    • Ziehen Sie Sphere2 in die Hierarchie, um ein untergeordnetes Element von origamicollection zu sein.Drag Sphere2 into the Hierarchy to be a child of OrigamiCollection.
  • Klicken Sie im Bereich Hierarchie mit der rechten Maustaste auf das Objekt direktional hell , und wählen Sie Löschen ausRight-click the Directional Light object in the Hierarchy Panel and select Delete.
  • Ziehen Sie aus dem Ordner holograms die Beleuchtung in das Stammverzeichnis des Bereichs Hierarchie.From the Holograms folder, drag Lights into the root of the Hierarchy Panel.
  • Wählen Sie in der Hierarchie die Option origamicollection aus.In the Hierarchy, select the OrigamiCollection.
  • Legen Sie im Inspektor die Transformations Position auf 0,-0,5, 2,0 fest.In the Inspector, set the transform position to 0, -0.5, 2.0.
  • Klicken Sie in Unity auf die Wiedergabe Schaltfläche, um eine Vorschau der holograms anzuzeigenPress the Play button in Unity to preview your holograms.
  • Die Origami-Objekte sollten im Vorschaufenster angezeigt werden.You should see the Origami objects in the preview window.
  • Drücken Sie ein zweites Mal, um den Vorschaumodus zu verhindern.Press Play a second time to stop preview mode.

Exportieren des Projekts aus Unity in Visual StudioExport the project from Unity to Visual Studio

  • Wählen Sie in Unity Datei > Buildeinstellungen aus.In Unity select File > Build Settings.

  • Wählen Sie in der Liste Plattform universelle Windows-Plattform aus, und klicken Sie auf Plattform wechseln.Select Universal Windows Platform in the Platform list and click Switch Platform.

  • Legen Sie das SDK auf Universal 10 und den Buildtyp auf D3D fest. Build TypeSet SDK to Universal 10 and Build Type to D3D.

  • Überprüfen Sie die Unity c#-Projekte.Check Unity C# Projects.

  • Klicken Sie auf offene Szenen hinzufügen , um die Szene hinzuzufügen.Click Add Open Scenes to add the scene.

  • Klicken Sie auf Erstellen.Click Build.

  • Erstellen Sie im Datei-Explorer-Fenster, das angezeigt wird, einen neuen Ordner mit dem Namen "App".In the file explorer window that appears, create a New Folder named "App".

  • Klicken Sie einfach auf den app-Ordner.Single click the App Folder.

  • Drücken Sie Ordner auswählen.Press Select Folder.

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

  • Öffnen Sie den App -Ordner.Open the App folder.

  • Öffnen Sie (Doppelklicken Sie auf) Origami. sln.Open (double click) Origami.sln.

  • Ä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.

  • Klicken Sie auf den Pfeil neben der Schaltfläche Gerät, und wählen Sie Remote Computer aus, um die Bereitstellung über Wi-Fi durchzuführen.Click on the arrow next to the Device button, and select Remote Machine to deploy over Wi-Fi.

    • Legen Sie die Adresse auf den Namen oder die IP-Adresse der hololens fest.Set the Address to the name or IP address of your HoloLens. Wenn Sie die IP-Adresse Ihres Geräts nicht kennen, suchen Sie in den Einstellungen > Netzwerk & Internet > Erweiterte Optionen , oder Fragen Sie Cortana "Hey Cortana, was ist meine IP-Adresse?" .If you do not know your device IP address, look in Settings > Network & Internet > Advanced Options or ask Cortana "Hey Cortana, What's my IP address?"
    • Wenn die hololens über USB angefügt sind, können Sie stattdessen ein Gerät für die Bereitstellung über USB auswählen.If the HoloLens is attached over USB, you may instead select Device to deploy over USB.
    • Lassen Sie den Authentifizierungsmodus auf Universal festgelegt.Leave the Authentication Mode set to Universal.
    • Klicken Sie auf auswählenClick Select
  • Klicken Sie auf Debuggen > starten ohne Debugging , oder drücken Sie STRG + F5.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.

  • Das Projekt Origami wird nun erstellt, in den hololens bereitgestellt und dann ausgeführt.The Origami project will now build, deploy to your HoloLens, and then run.

  • Platzieren Sie Ihre hololens, und sehen Sie sich an, um Ihre neuen holograms anzuzeigen.Put on your HoloLens and look around to see your new holograms.

Kapitel 2: BlickChapter 2 - Gaze

In diesem Kapitel werden die ersten von drei Möglichkeiten vorgestellt, mit denen Sie mit ihren holograms interagieren können.In this chapter, we are going to introduce the first of three ways of interacting with your holograms -- gaze.

ZieleObjectives

  • Visualisieren Sie Ihren Blick mithilfe eines weltweit gesperrten Cursors.Visualize your gaze using a world-locked cursor.

InstructionsInstructions

  • Wechseln Sie zurück zu Ihrem Unity-Projekt, und schließen Sie das Fenster mit den Buildeinstellungen, wenn es noch geöffnet ist.Go back to your Unity project, and close the Build Settings window if it's still open.
  • Wählen Sie im Projekt Panel den Ordner holograms aus.Select the Holograms folder in the Project panel.
  • Ziehen Sie das Cursor Objekt in das Hierarchie Panel auf der Stamm Ebene.Drag the Cursor object into the Hierarchy panel at the root level.
  • Doppelklicken Sie auf das Cursor Objekt, um es genauer zu betrachten.Double-click on the Cursor object to take a closer look at it.
  • Klicken Sie im Projekt Panel mit der rechten Maustaste auf den Ordner Scripts .Right-click on the Scripts folder in the Project panel.
  • Klicken Sie auf das Untermenü Erstellen .Click the Create sub-menu.
  • Wählen Sie c#-Skript aus.Select C# Script.
  • Nennen Sie das Skript worldcursor.Name the script WorldCursor. Hinweis: bei dem Namen wird die Groß-/Kleinschreibung beachtet.Note: The name is case-sensitive. Sie müssen die Erweiterung ". cs" nicht hinzufügen.You do not need to add the .cs extension.
  • Wählen Sie im Hierarchie Panel das Cursor Objekt aus.Select the Cursor object in the Hierarchy panel.
  • Verschieben Sie das worldcursor -Skript per Drag & amp; Drop in den Bereich Inspector.Drag and drop the WorldCursor script into the Inspector panel.
  • Doppelklicken Sie auf das Skript worldcursor , um es in Visual Studio zu öffnen.Double-click the WorldCursor script to open it in Visual Studio.
  • Fügen Sie diesen Code in WorldCursor.cs ein, und Speichern Sie alle.Copy and paste this code into WorldCursor.cs and Save All.
using UnityEngine;

public class WorldCursor : MonoBehaviour
{
    private MeshRenderer meshRenderer;

    // Use this for initialization
    void Start()
    {
        // Grab the mesh renderer that's on the same object as this script.
        meshRenderer = this.gameObject.GetComponentInChildren<MeshRenderer>();
    }

    // Update is called once per frame
    void Update()
    {
        // Do a raycast into the world based on the user's
        // head position and orientation.
        var headPosition = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;

        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
        {
            // If the raycast hit a hologram...
            // Display the cursor mesh.
            meshRenderer.enabled = true;

            // Move the cursor to the point where the raycast hit.
            this.transform.position = hitInfo.point;

            // Rotate the cursor to hug the surface of the hologram.
            this.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
        }
        else
        {
            // If the raycast did not hit a hologram, hide the cursor mesh.
            meshRenderer.enabled = false;
        }
    }
}
  • Erstellen Sie die APP aus dem Datei > den Buildeinstellungen neu.Rebuild the app from File > Build Settings.
  • Kehren Sie zur Visual Studio-Projekt Mappe zurück, die Sie zuvor für die Bereitstellung in hololens verwendet habenReturn to the Visual Studio solution previously used to deploy to your HoloLens.
  • Wählen Sie bei entsprechender Aufforderung "alle neu laden" aus.Select 'Reload All' when prompted.
  • Klicken Sie auf Debuggen > starten ohne Debugging , oder drücken Sie STRG + F5.Click Debug -> Start Without debugging or press Ctrl + F5.
  • Sehen Sie sich nun die Szene an, und sehen Sie, wie der Cursor mit der Form von Objekten interagiert.Now look around the scene and notice how the cursor interacts with the shape of objects.

Kapitel 3: GestenChapter 3 - Gestures

In diesem Kapitel wird die Unterstützung für Gestenhinzugefügt.In this chapter, we'll add support for gestures. Wenn der Benutzer eine Papierkugel auswählt, wird die Kugel durch das Aktivieren der Schwerkraft mit der Physik-Engine von Unity erreicht.When the user selects a paper sphere, we'll make the sphere fall by turning on gravity using Unity's physics engine.

ZieleObjectives

  • Steuern Sie Ihre Hologramme mit der SELECT-Geste.Control your holograms with the Select gesture.

InstructionsInstructions

Wir beginnen mit der Erstellung eines Skripts und können dann die SELECT-Geste erkennen.We'll start by creating a script then can detect the Select gesture.

  • Erstellen Sie im Ordner Scripts ein Skript mit dem Namen " gazegesturemanager".In the Scripts folder, create a script named GazeGestureManager.
  • Ziehen Sie das Skript " gazegesturemanager " auf das Objekt " origamicollection " in der Hierarchie.Drag the GazeGestureManager script onto the OrigamiCollection object in the Hierarchy.
  • Öffnen Sie das Skript " gazegesturemanager " in Visual Studio, und fügen Sie den folgenden Code hinzu:Open the GazeGestureManager script in Visual Studio and add the following code:
using UnityEngine;
using UnityEngine.XR.WSA.Input;

public class GazeGestureManager : MonoBehaviour
{
    public static GazeGestureManager Instance { get; private set; }

    // Represents the hologram that is currently being gazed at.
    public GameObject FocusedObject { get; private set; }

    GestureRecognizer recognizer;

    // Use this for initialization
    void Awake()
    {
        Instance = this;

        // Set up a GestureRecognizer to detect Select gestures.
        recognizer = new GestureRecognizer();
        recognizer.Tapped += (args) =>
        {
            // Send an OnSelect message to the focused object and its ancestors.
            if (FocusedObject != null)
            {
                FocusedObject.SendMessageUpwards("OnSelect", SendMessageOptions.DontRequireReceiver);
            }
        };
        recognizer.StartCapturingGestures();
    }

    // Update is called once per frame
    void Update()
    {
        // Figure out which hologram is focused this frame.
        GameObject oldFocusObject = FocusedObject;

        // Do a raycast into the world based on the user's
        // head position and orientation.
        var headPosition = Camera.main.transform.position;
        var gazeDirection = Camera.main.transform.forward;

        RaycastHit hitInfo;
        if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
        {
            // If the raycast hit a hologram, use that as the focused object.
            FocusedObject = hitInfo.collider.gameObject;
        }
        else
        {
            // If the raycast did not hit a hologram, clear the focused object.
            FocusedObject = null;
        }

        // If the focused object changed this frame,
        // start detecting fresh gestures again.
        if (FocusedObject != oldFocusObject)
        {
            recognizer.CancelGestures();
            recognizer.StartCapturingGestures();
        }
    }
}
  • Erstellen Sie ein weiteres Skript im Ordner "Scripts", diesmal mit dem Namen spherecommands.Create another script in the Scripts folder, this time named SphereCommands.
  • Erweitern Sie das Objekt origamicollection in der Hierarchie Ansicht.Expand the OrigamiCollection object in the Hierarchy view.
  • Ziehen Sie das spherecommands -Skript auf das Sphere1 -Objekt im Hierarchie Panel.Drag the SphereCommands script onto the Sphere1 object in the Hierarchy panel.
  • Ziehen Sie das spherecommands -Skript auf das Sphere2 -Objekt im Hierarchie Panel.Drag the SphereCommands script onto the Sphere2 object in the Hierarchy panel.
  • Öffnen Sie das Skript in Visual Studio zur Bearbeitung, und ersetzen Sie den Standard Code durch den folgenden Code:Open the script in Visual Studio for editing, and replace the default code with this:
using UnityEngine;

public class SphereCommands : MonoBehaviour
{
    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // If the sphere has no Rigidbody component, add one to enable physics.
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }
}
  • Exportieren, erstellen und Bereitstellen der app in ihren hololens.Export, build and deploy the app to your HoloLens.
  • Sehen Sie sich einen der Bereiche an.Look at one of the spheres.
  • Führen Sie die SELECT-Geste aus, und beobachten Sie den unteren Bereich der Kugel.Perform the select gesture and watch the sphere drop onto the surface below.

Kapitel 4: StimmeChapter 4 - Voice

In diesem Kapitel fügen wir die Unterstützung für zwei Sprachbefehlehinzu: "Reset World", um die gelöschten Bereiche an ihren ursprünglichen Speicherort zurückzugeben, und "Drop Sphere", um die Kugel zu verlieren.In this chapter, we'll add support for two voice commands: "Reset world" to return the dropped spheres to their original location, and "Drop sphere" to make the sphere fall.

ZieleObjectives

  • Fügen Sie Sprachbefehle hinzu, die immer im Hintergrund lauschen.Add voice commands that always listen in the background.
  • Erstellen Sie ein – Hologramm, das auf einen Voice-Befehl reagiert.Create a hologram that reacts to a voice command.

InstructionsInstructions

  • Erstellen Sie im Ordner Skripts ein Skript mit dem Namen " Redner-Manager".In the Scripts folder, create a script named SpeechManager.
  • Ziehen Sie das sprach-Manager -Skript auf das origamicollection -Objekt in der Hierarchie.Drag the SpeechManager script onto the OrigamiCollection object in the Hierarchy
  • Öffnen Sie das sprach-Manager -Skript in Visual Studio.Open the SpeechManager script in Visual Studio.
  • Kopieren Sie diesen Code, und fügen Sie ihn in SpeechManager.cs ein. Speichern Sie alleCopy and paste this code into SpeechManager.cs and Save All:
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Windows.Speech;

public class SpeechManager : MonoBehaviour
{
    KeywordRecognizer keywordRecognizer = null;
    Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

    // Use this for initialization
    void Start()
    {
        keywords.Add("Reset world", () =>
        {
            // Call the OnReset method on every descendant object.
            this.BroadcastMessage("OnReset");
        });

        keywords.Add("Drop Sphere", () =>
        {
            var focusObject = GazeGestureManager.Instance.FocusedObject;
            if (focusObject != null)
            {
                // Call the OnDrop method on just the focused object.
                focusObject.SendMessage("OnDrop", SendMessageOptions.DontRequireReceiver);
            }
        });

        // Tell the KeywordRecognizer about our keywords.
        keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

        // Register a callback for the KeywordRecognizer and start recognizing!
        keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;
        keywordRecognizer.Start();
    }

    private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
    {
        System.Action keywordAction;
        if (keywords.TryGetValue(args.text, out keywordAction))
        {
            keywordAction.Invoke();
        }
    }
}
  • Öffnen Sie das spherecommands -Skript in Visual Studio.Open the SphereCommands script in Visual Studio.
  • Aktualisieren Sie das Skript wie folgt:Update the script to read as follows:
using UnityEngine;

public class SphereCommands : MonoBehaviour
{
    Vector3 originalPosition;

    // Use this for initialization
    void Start()
    {
        // Grab the original local position of the sphere when the app starts.
        originalPosition = this.transform.localPosition;
    }

    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // If the sphere has no Rigidbody component, add one to enable physics.
        if (!this.GetComponent<Rigidbody>())
        {
            var rigidbody = this.gameObject.AddComponent<Rigidbody>();
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
    }

    // Called by SpeechManager when the user says the "Reset world" command
    void OnReset()
    {
        // If the sphere has a Rigidbody component, remove it to disable physics.
        var rigidbody = this.GetComponent<Rigidbody>();
        if (rigidbody != null)
        {
            rigidbody.isKinematic = true;
            Destroy(rigidbody);
        }

        // Put the sphere back into its original local position.
        this.transform.localPosition = originalPosition;
    }

    // Called by SpeechManager when the user says the "Drop sphere" command
    void OnDrop()
    {
        // Just do the same logic as a Select gesture.
        OnSelect();
    }
}
  • Exportieren, erstellen und Bereitstellen der app in ihren hololens.Export, build and deploy the app to your HoloLens.
  • Sehen Sie sich einen der Bereiche an, und sagen Sie "Drop Sphere".Look at one of the spheres, and say "Drop Sphere".
  • Sagen Sie "Welt zurücksetzen", um Sie wieder an Ihre ursprünglichen Positionen zu bringen.Say "Reset World" to bring them back to their initial positions.

Kapitel 5: räumlicher SoundChapter 5 - Spatial sound

In diesem Kapitel werden wir der App Musik hinzufügen und dann bei bestimmten Aktionen Soundeffekte auslöst.In this chapter, we'll add music to the app, and then trigger sound effects on certain actions. Wir verwenden den räumlichen Ton , um Klänge an einem bestimmten Speicherort im 3D-Raum zu geben.We'll be using spatial sound to give sounds a specific location in 3D space.

ZieleObjectives

  • Hören Sie holograms in ihrer Welt.Hear holograms in your world.

InstructionsInstructions

  • Wählen Sie in Unity im oberen Menü > Projekteinstellungen > Audiodatei bearbeiten aus.In Unity select from the top menu Edit > Project Settings > Audio
  • Suchen Sie im Inspektor-Panel auf der rechten Seite die Einstellung für das spatializer-Plug -in, und wählen Sie MS HRTF spatializer aus.In the Inspector Panel on the right side, find the Spatializer Plugin setting and select MS HRTF Spatializer.
  • Ziehen Sie das Ambiente -Objekt aus dem Ordner holograms im Projekt Panel auf das Objekt origamicollection im Bereich Hierarchie.From the Holograms folder in the Project panel, drag the Ambience object onto the OrigamiCollection object in the Hierarchy Panel.
  • Wählen Sie origamicollection aus, und suchen Sie im Inspektor-Panel die Komponente Audioquelle .Select OrigamiCollection and find the Audio Source component in the Inspector panel. Ändern Sie die folgenden Eigenschaften:Change these properties:
    • Überprüfen Sie die spatialize -Eigenschaft.Check the Spatialize property.
    • Überprüfen Sie die wieder Gabe bei wach.Check the Play On Awake.
    • Ändern Sie räumliche Blend in 3D , indem Sie den Schieberegler nach rechts ziehen.Change Spatial Blend to 3D by dragging the slider all the way to the right. Wenn Sie den Schieberegler verschieben, sollte der Wert von 0 in 1 geändert werden.The value should change from 0 to 1 when you move the slider.
    • Überprüfen Sie die Loop -Eigenschaft.Check the Loop property.
    • Erweitern Sie 3D-Sound Einstellungen, und geben Sie 0,1 für die Doppler-Ebene ein.Expand 3D Sound Settings, and enter 0.1 for Doppler Level.
    • Legen Sie volumenrolloff auf logarithmische Rolloff fest.Set Volume Rolloff to Logarithmic Rolloff.
    • Legen Sie Max Distance auf 20 fest.Set Max Distance to 20.
  • Erstellen Sie im Ordner Scripts ein Skript mit dem Namen " spheresounds".In the Scripts folder, create a script named SphereSounds.
  • Ziehen Sie spheresounds per Drag & Drop auf die Objekte Sphere1 und Sphere2 in der Hierarchie.Drag and drop SphereSounds to the Sphere1 and Sphere2 objects in the Hierarchy.
  • Öffnen Sie " spheresounds " in Visual Studio, aktualisieren Sie den folgenden Code, und Speichern Sie alle.Open SphereSounds in Visual Studio, update the following code and Save All.
using UnityEngine;

public class SphereSounds : MonoBehaviour
{
    AudioSource impactAudioSource = null;
    AudioSource rollingAudioSource = null;

    bool rolling = false;

    void Start()
    {
        // Add an AudioSource component and set up some defaults
        impactAudioSource = gameObject.AddComponent<AudioSource>();
        impactAudioSource.playOnAwake = false;
        impactAudioSource.spatialize = true;
        impactAudioSource.spatialBlend = 1.0f;
        impactAudioSource.dopplerLevel = 0.0f;
        impactAudioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        impactAudioSource.maxDistance = 20f;

        rollingAudioSource = gameObject.AddComponent<AudioSource>();
        rollingAudioSource.playOnAwake = false;
        rollingAudioSource.spatialize = true;
        rollingAudioSource.spatialBlend = 1.0f;
        rollingAudioSource.dopplerLevel = 0.0f;
        rollingAudioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        rollingAudioSource.maxDistance = 20f;
        rollingAudioSource.loop = true;

        // Load the Sphere sounds from the Resources folder
        impactAudioSource.clip = Resources.Load<AudioClip>("Impact");
        rollingAudioSource.clip = Resources.Load<AudioClip>("Rolling");
    }

    // Occurs when this object starts colliding with another object
    void OnCollisionEnter(Collision collision)
    {
        // Play an impact sound if the sphere impacts strongly enough.
        if (collision.relativeVelocity.magnitude >= 0.1f)
        {
            impactAudioSource.Play();
        }
    }

    // Occurs each frame that this object continues to collide with another object
    void OnCollisionStay(Collision collision)
    {
        Rigidbody rigid = gameObject.GetComponent<Rigidbody>();

        // Play a rolling sound if the sphere is rolling fast enough.
        if (!rolling && rigid.velocity.magnitude >= 0.01f)
        {
            rolling = true;
            rollingAudioSource.Play();
        }
        // Stop the rolling sound if rolling slows down.
        else if (rolling && rigid.velocity.magnitude < 0.01f)
        {
            rolling = false;
            rollingAudioSource.Stop();
        }
    }

    // Occurs when this object stops colliding with another object
    void OnCollisionExit(Collision collision)
    {
        // Stop the rolling sound if the object falls off and stops colliding.
        if (rolling)
        {
            rolling = false;
            impactAudioSource.Stop();
            rollingAudioSource.Stop();
        }
    }
}
  • Speichern Sie das Skript, und kehren Sie zu Unity zurück.Save the script, and return to Unity.
  • Exportieren, erstellen und Bereitstellen der app in ihren hololens.Export, build and deploy the app to your HoloLens.
  • Bewegen Sie sich näher und weiter von der Stufe aus, und schalten Sie die Seite auf die Seite, um die Geräusche zu ändern.Move closer and further from the Stage and turn side-to-side to hear the sounds change.

Kapitel 6: räumliche ZuordnungChapter 6 - Spatial mapping

Nun verwenden wir die räumliche Zuordnung , um das Spiel Board in einem realen Objekt in der realen Welt zu platzieren.Now we are going to use spatial mapping to place the game board on a real object in the real world.

ZieleObjectives

  • Bringen Sie Ihre reale Welt in die virtuelle Welt.Bring your real world into the virtual world.
  • Platzieren Sie Ihre Hologramme, wo Sie für Sie am wichtigsten sind.Place your holograms where they matter most to you.

InstructionsInstructions

  • Klicken Sie in Unity im Projekt Panel auf den Ordner holograms .In Unity, click on the Holograms folder in the Project panel.
  • Ziehen Sie das Objekt für die räumliche Zuordnung in den Stamm der Hierarchie.Drag the Spatial Mapping asset into the root of the Hierarchy.
  • Klicken Sie in der Hierarchie auf das räumliche Mapping -Objekt.Click on the Spatial Mapping object in the Hierarchy.
  • Ändern Sie im Inspektor-Panel die folgenden Eigenschaften:In the Inspector panel, change the following properties:
    • Aktivieren Sie das Kontrollkästchen visuelle Meshes zeichnen .Check the Draw Visual Meshes box.
    • Suchen Sie das Zeichnungs Material , und klicken Sie auf den Kreis rechts.Locate Draw Material and click the circle on the right. Geben Sie im Feld oben den Text "Draht Modell" in das Suchfeld ein.Type "wireframe" into the search field at the top. Klicken Sie auf das Ergebnis, und schließen Sie das Fenster.Click on the result and then close the window. Wenn Sie dies tun, sollte der Wert für Zeichnungs Material auf Wireframe festgelegt werden.When you do this, the value for Draw Material should get set to Wireframe.
  • Exportieren, erstellen und Bereitstellen der app in ihren hololens.Export, build and deploy the app to your HoloLens.
  • Wenn die app ausgeführt wird, überlagert ein Draht Modell-Mesh ihre reale Welt.When the app runs, a wireframe mesh will overlay your real world.
  • Sehen Sie sich an, wie sich eine parallele Kugel auf der Ebene befindet und auf den Boden zeigt.Watch how a rolling sphere will fall off the stage, and onto the floor!

Nun zeigen wir Ihnen, wie Sie die origamicollection an einen neuen Speicherort verschieben:Now we'll show you how to move the OrigamiCollection to a new location:

  • Erstellen Sie im Ordner Scripts ein Skript mit dem Namen " taptoplaceparent".In the Scripts folder, create a script named TapToPlaceParent.
  • Erweitern Sie in der- Hierarchie die origamicollection , und wählen Sie das Stage -Objekt aus.In the Hierarchy, expand the OrigamiCollection and select the Stage object.
  • Ziehen Sie das Skript taptoplaceparent auf das Stage-Objekt.Drag the TapToPlaceParent script onto the Stage object.
  • Öffnen Sie das Skript " taptoplaceparent " in Visual Studio, und aktualisieren Sie es wie folgt:Open the TapToPlaceParent script in Visual Studio, and update it to be the following:
using UnityEngine;

public class TapToPlaceParent : MonoBehaviour
{
    bool placing = false;

    // Called by GazeGestureManager when the user performs a Select gesture
    void OnSelect()
    {
        // On each Select gesture, toggle whether the user is in placing mode.
        placing = !placing;

        // If the user is in placing mode, display the spatial mapping mesh.
        if (placing)
        {
            SpatialMapping.Instance.DrawVisualMeshes = true;
        }
        // If the user is not in placing mode, hide the spatial mapping mesh.
        else
        {
            SpatialMapping.Instance.DrawVisualMeshes = false;
        }
    }

    // Update is called once per frame
    void Update()
    {
        // If the user is in placing mode,
        // update the placement to match the user's gaze.

        if (placing)
        {
            // Do a raycast into the world that will only hit the Spatial Mapping mesh.
            var headPosition = Camera.main.transform.position;
            var gazeDirection = Camera.main.transform.forward;

            RaycastHit hitInfo;
            if (Physics.Raycast(headPosition, gazeDirection, out hitInfo,
                30.0f, SpatialMapping.PhysicsRaycastMask))
            {
                // Move this object's parent object to
                // where the raycast hit the Spatial Mapping mesh.
                this.transform.parent.position = hitInfo.point;

                // Rotate this object's parent object to face the user.
                Quaternion toQuat = Camera.main.transform.localRotation;
                toQuat.x = 0;
                toQuat.z = 0;
                this.transform.parent.rotation = toQuat;
            }
        }
    }
}
  • Exportieren, erstellen und Bereitstellen der app.Export, build and deploy the app.
  • Jetzt sollten Sie nun in der Lage sein, das Spiel an einem bestimmten Speicherort zu platzieren, indem Sie es mit der SELECT-Geste anordnen und dann an eine neue Stelle verschieben und die Auswahl Geste erneut verwenden.Now you should now be able to place the game in a specific location by gazing at it, using the Select gesture and then moving to a new location, and using the Select gesture again.

Kapitel 7: Holographic FunChapter 7 - Holographic fun

ZieleObjectives

  • Zeigen Sie den Einstieg in eine Holographic-Unterwelt an.Reveal the entrance to a holographic underworld.

InstructionsInstructions

Nun zeigen wir Ihnen, wie Sie die Holographic-Unterwelt entdecken:Now we'll show you how to uncover the holographic underworld:

  • Aus dem Ordner " holograms " im Projekt Panel:From the Holograms folder in the Project Panel:
    • Ziehen Sie Underworld in die Hierarchie, um ein untergeordnetes Element von origamicollection zu sein.Drag Underworld into the Hierarchy to be a child of OrigamiCollection.
  • Erstellen Sie im Ordner Scripts ein Skript mit dem Namen hittarget.In the Scripts folder, create a script named HitTarget.
  • Erweitern Sie in der- Hierarchie die " origamicollection".In the Hierarchy, expand the OrigamiCollection.
  • Erweitern Sie das Stage -Objekt, und wählen Sie das Ziel Objekt (blauer Lüfter) aus.Expand the Stage object and select the Target object (blue fan).
  • Ziehen Sie das hittarget -Skript auf das Ziel Objekt.Drag the HitTarget script onto the Target object.
  • Öffnen Sie das hittarget -Skript in Visual Studio, und aktualisieren Sie es wie folgt:Open the HitTarget script in Visual Studio, and update it to be the following:
using UnityEngine;

public class HitTarget : MonoBehaviour
{
    // These public fields become settable properties in the Unity editor.
    public GameObject underworld;
    public GameObject objectToHide;

    // Occurs when this object starts colliding with another object
    void OnCollisionEnter(Collision collision)
    {
        // Hide the stage and show the underworld.
        objectToHide.SetActive(false);
        underworld.SetActive(true);

        // Disable Spatial Mapping to let the spheres enter the underworld.
        SpatialMapping.Instance.MappingEnabled = false;
    }
}
  • Wählen Sie in Unity das Ziel Objekt aus.In Unity, select the Target object.
  • Zwei öffentliche Eigenschaften sind jetzt für die Treffer Ziel Komponente sichtbar, und Sie müssen auf Objekte in unserer Szene verweisen:Two public properties are now visible on the Hit Target component and need to reference objects in our scene:
    • Ziehen Sie die Option " Underworld " aus dem Bereich Hierarchie in die Eigenschaft für die Ziel Komponente.Drag Underworld from the Hierarchy panel to the Underworld property on the Hit Target component.
    • Ziehen Sie Phase aus dem Bereich Hierarchie auf das Objekt, um die Eigenschaft für die Treffer Ziel Komponente auszublenden.Drag Stage from the Hierarchy panel to the Object to Hide property on the Hit Target component.
  • Exportieren, erstellen und Bereitstellen der app.Export, build and deploy the app.
  • Platzieren Sie die Origami-Auflistung auf der Etage, und verwenden Sie dann die Aktion auswählen, um einen Kugel Ablage Vorgang zu erstellen.Place the Origami Collection on the floor, and then use the Select gesture to make a sphere drop.
  • Wenn die Kugel auf das Ziel (blauer Lüfter) trifft, tritt eine Explosion auf.When the sphere hits the target (blue fan), an explosion will occur. Die Sammlung wird ausgeblendet, und ein Loch in der Unterwelt wird angezeigt.The collection will be hidden and a hole to the underworld will appear.

Das EndeThe end

Und das ist das Ende dieses Tutorials!And that's the end of this tutorial!

Sie haben Folgendes gelernt:You learned:

  • Erstellen einer Holographic-app in Unity.How to create a holographic app in Unity.
  • Verwendung von Blick, Bewegung, Stimme, Sound und räumlicher Zuordnung.How to make use of gaze, gesture, voice, sound, and spatial mapping.
  • Erfahren Sie, wie Sie eine APP mit Visual Studio erstellen und bereitstellen.How to build and deploy an app using Visual Studio.

Nun können Sie mit der Erstellung Ihrer eigenen Holographic-Benutzeroberflächen beginnen!You are now ready to start creating your own holographic experience!

Siehe auchSee also