HoloLens (1. generacja) Basics 101: Complete project with device (Podstawowe informacje o urządzeniu)


Ważne

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


Ten samouczek przeprowadzi Cię przez kompletny projekt wbudowany w aparat Unity, który demonstruje podstawowe funkcje Windows Mixed Reality na urządzeniu HoloLens, w tym spojrzenie, gesty, dane wejściowe głosu, dźwięk przestrzenny i mapowanie przestrzenne.

Ukończenie tego samouczka potrwa około 1 godziny.

Obsługa urządzeń

Kurs HoloLens Immersyjne zestawy nagłowne
MR Basics 101: Complete project with device (Podstawy mr 101: kompletny projekt z urządzeniem) ✔️

Przed rozpoczęciem

Wymagania wstępne

Pliki projektu

  • Pobierz pliki wymagane przez projekt. Wymaga aparatu Unity 2017.2 lub nowszego.
    • Jeśli nadal potrzebujesz obsługi aparatu Unity 5.6, skorzystaj z tej wersji.
    • Jeśli nadal potrzebujesz obsługi aparatu Unity 5.5, skorzystaj z tej wersji.
    • Jeśli nadal potrzebujesz obsługi aparatu Unity 5.4, skorzystaj z tej wersji.
  • Cofnij archiwizowanie plików na pulpicie lub innych łatwych w dotarciu do lokalizacji. Zachowaj nazwę folderu jako Origami.

Uwaga

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

Rozdział 1 — Świat "Holo"

W tym rozdziale skonfigurujemy nasz pierwszy projekt aparatu Unity i przejdziemy przez proces kompilacji i wdrażania.

Cele

  • Konfigurowanie aparatu Unity na potrzeby programowania holograficznego.
  • Utwórz hologram.
  • Zobacz wykonany hologram.

Instrukcje

  • Uruchom aparat Unity.
  • Wybierz pozycję Otwórz.
  • Wprowadź lokalizację jako folder Origami , który wcześniej nie został zarchiwizowany.
  • Wybierz pozycję Origami i kliknij pozycję Wybierz folder.
  • Ponieważ projekt Origami nie zawiera sceny, zapisz pustą scenę domyślną w nowym pliku przy użyciu: Zapiszscenęjako pliku / .
  • Nazwij nową scenę Origami i naciśnij przycisk Zapisz .

Konfigurowanie głównej kamery wirtualnej

  • W Panelu hierarchii wybierz pozycję Aparat główny.
  • W inspektorze ustaw pozycję przekształcenia na 0,0,0.
  • Znajdź właściwość Clear Flags i zmień listę rozwijaną z Skybox na Kolor stały.
  • Kliknij pole Tło , aby otworzyć selektor kolorów.
  • Ustaw wartości R, G, B i A na 0.

Konfigurowanie sceny

  • W panelu Hierarchy (Hierarchia) kliknij pozycję Create and Create Empty (Utwórz i utwórz puste).
  • Kliknij prawym przyciskiem myszy nowy obiekt GameObject i wybierz polecenie Zmień nazwę. Zmień nazwę obiektu GameObject na OrigamiCollection.
  • W folderze Holograms w panelu projektu (rozwiń węzeł Zasoby i wybierz pozycję Hologramy lub kliknij dwukrotnie folder Hologramy w panelu projektu):
    • Przeciągnij element Stage do hierarchii, aby być elementem podrzędnym kolekcji OrigamiCollection.
    • Przeciągnij element Sphere1 do hierarchii, aby być elementem podrzędnym origamiCollection.
    • Przeciągnij element Sphere2 do hierarchii, aby być elementem podrzędnym origamiCollection.
  • Kliknij prawym przyciskiem myszy obiekt Directional Light w panelu hierarchii i wybierz polecenie Usuń.
  • Z folderu Holograms przeciągnij pozycję Lights do katalogu głównego panelu hierarchii.
  • W obszarze Hierarchy (Hierarchia) wybierz pozycję OrigamiCollection.
  • W inspektorze ustaw pozycję przekształcania na 0, -0,5, 2,0.
  • Naciśnij przycisk Odtwórz w a unity, aby wyświetlić podgląd hologramów.
  • Obiekty Origami powinny być widoczne w oknie podglądu.
  • Naciśnij pozycję Odtwórz po raz drugi, aby zatrzymać tryb podglądu.

Eksportowanie projektu z aparatu Unity do programu Visual Studio

  • W akrocie Unity wybierz pozycję Ustawienia kompilacji pliku>.

  • Wybierz platforma uniwersalna systemu Windows na liście Platforma, a następnie kliknij pozycję Przełącz platformę.

  • Ustaw zestaw SDK na wartość Universal 10 , a typ kompilacji na D3D.

  • Sprawdź projekty języka C# aparatu Unity.

  • Kliknij pozycję Dodaj otwarte sceny , aby dodać scenę.

  • Kliknij pozycję Kompiluj.

  • W wyświetlonym oknie Eksploratora plików utwórz nowy folder o nazwie "Aplikacja".

  • Jednym kliknięciem folderu aplikacji.

  • Naciśnij pozycję Wybierz folder.

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

  • Otwórz folder Aplikacja .

  • Otwórz (kliknij dwukrotnie) Origami.sln.

  • Za pomocą górnego paska narzędzi w programie Visual Studio zmień element docelowy z Debuguj na Wydanie i z ARM na X86.

  • Kliknij strzałkę obok przycisku Urządzenie, a następnie wybierz pozycję Maszyna zdalna , aby wdrożyć za pośrednictwem sieci Wi-Fi.

    • Ustaw wartość pola Adres na nazwę lub adres IP urządzenia HoloLens. Jeśli nie znasz adresu IP urządzenia, zapoznaj się z tematem Ustawienia > Sieć & Opcje zaawansowane internetu > lub zapytaj Cortanę "Hej Cortana, jaki jest mój adres IP?"
    • Jeśli urządzenie HoloLens jest podłączone za pośrednictwem portu USB, możesz zamiast tego wybrać pozycję Urządzenie do wdrożenia za pośrednictwem portu USB.
    • Pozostaw tryb uwierzytelniania ustawiony na wartość Universal.
    • Kliknij pozycję Wybierz
  • Kliknij przycisk Rozpocznij debugowanie > bez debugowania lub naciśnij klawisze Ctrl + F5. Jeśli jest to pierwsze wdrożenie na urządzeniu, konieczne będzie sparowanie go z programem Visual Studio.

  • Projekt Origami będzie teraz kompilować, wdrażać go na urządzeniu HoloLens, a następnie uruchamiać.

  • Umieść urządzenie HoloLens i rozejrzyj się, aby zobaczyć nowe hologramy.

Rozdział 2 — Spojrzenie

W tym rozdziale przedstawimy pierwsze z trzech sposobów interakcji z hologramami - spojrzenie.

Cele

  • Wizualizowanie spojrzenia przy użyciu kursora zablokowanego na świecie.

Instrukcje

  • Wstecz do projektu aparatu Unity i zamknij okno Ustawienia kompilacji, jeśli jest ono nadal otwarte.
  • Wybierz folder Hologramy w panelu Projekt.
  • Przeciągnij obiekt Cursor do panelu Hierarchy na poziomie głównym.
  • Kliknij dwukrotnie obiekt Cursor , aby przyjrzeć się temu obiektowi.
  • Kliknij prawym przyciskiem myszy folder Scripts (Skrypty ) na panelu Project (Projekt).
  • Kliknij podmenu Utwórz .
  • Wybierz pozycję Skrypt języka C#.
  • Nadaj skryptowi nazwę WorldCursor. Uwaga: w nazwie jest rozróżniana wielkość liter. Nie trzeba dodawać rozszerzenia cs.
  • Wybierz obiekt Kursor w panelu Hierarchy (Hierarchia).
  • Przeciągnij i upuść skrypt WorldCursor do panelu Inspector (Inspektor).
  • Kliknij dwukrotnie skrypt WorldCursor , aby otworzyć go w programie Visual Studio.
  • Skopiuj i wklej ten kod do pliku WorldCursor.cs i zapisz wszystko.
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;
        }
    }
}
  • Ponownie skompiluj aplikację z ustawień kompilacji pliku>.
  • Wróć do rozwiązania programu Visual Studio użytego wcześniej do wdrożenia na urządzeniu HoloLens.
  • Po wyświetleniu monitu wybierz pozycję "Załaduj ponownie wszystko".
  • Kliknij pozycję Debuguj —> rozpocznij bez debugowania lub naciśnij klawisze Ctrl + F5.
  • Teraz przyjrzyj się scenie i zwróć uwagę na sposób interakcji kursora z kształtem obiektów.

Rozdział 3 — Gesty

W tym rozdziale dodamy obsługę gestów. Gdy użytkownik wybierze kulę papierową, sprawimy, że kula spadnie, włączając grawitację przy użyciu aparatu fizyki aparatu Unity.

Cele

  • Kontroluj hologramy za pomocą gestu Wybierz.

Instrukcje

Zaczniemy od utworzenia skryptu, a następnie możemy wykryć gest Select.

  • W folderze Scripts utwórz skrypt o nazwie GazeGestureManager.
  • Przeciągnij skrypt GazeGestureManager do obiektu OrigamiCollection w hierarchii.
  • Otwórz skrypt GazeGestureManager w programie Visual Studio i dodaj następujący kod:
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();
        }
    }
}
  • Utwórz inny skrypt w folderze Skrypty, tym razem o nazwie SphereCommands.
  • Rozwiń obiekt OrigamiCollection w widoku Hierarchii.
  • Przeciągnij skrypt SphereCommands do obiektu Sphere1 na panelu Hierarchia.
  • Przeciągnij skrypt SphereCommands do obiektu Sphere2 na panelu Hierarchia.
  • Otwórz skrypt w programie Visual Studio do edycji i zastąp domyślny kod następującym kodem:
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;
        }
    }
}
  • Eksportowanie, kompilowanie i wdrażanie aplikacji na urządzeniu HoloLens.
  • Spójrz na jedną z kul.
  • Wykonaj gest zaznaczania i watch upuścić sferę na powierzchni poniżej.

Rozdział 4 — Głos

W tym rozdziale dodamy obsługę dwóch poleceń głosowych: "Resetuj świat", aby przywrócić porzucone kule do ich oryginalnej lokalizacji i "Drop sphere", aby upaść sferę.

Cele

  • Dodaj polecenia głosowe, które zawsze nasłuchują w tle.
  • Utwórz hologram reagujący na polecenie głosowe.

Instrukcje

  • W folderze Scripts utwórz skrypt o nazwie SpeechManager.
  • Przeciągnij skrypt SpeechManager do obiektu OrigamiCollection w hierarchii
  • Otwórz skrypt SpeechManager w programie Visual Studio.
  • Skopiuj i wklej ten kod do pliku SpeechManager.cs i zapisz wszystko:
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();
        }
    }
}
  • Otwórz skrypt SphereCommands w programie Visual Studio.
  • Zaktualizuj skrypt w następujący sposób:
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();
    }
}
  • Eksportowanie, kompilowanie i wdrażanie aplikacji na urządzeniu HoloLens.
  • Spójrz na jedną z kul i powiedz "Drop Sphere".
  • Powiedz "Resetuj świat", aby przywrócić je do swoich początkowych pozycji.

Rozdział 5 . Dźwięk przestrzenny

W tym rozdziale dodamy muzykę do aplikacji, a następnie wyzwolimy efekty dźwiękowe dla niektórych akcji. Będziemy używać dźwięku przestrzennego do nadawania dźwiękom określonej lokalizacji w przestrzeni 3D.

Cele

  • Posłuchaj hologramów na świecie.

Instrukcje

  • W afiszacie Unity wybierz pozycję z górnego menu Edytuj > dźwięk ustawień > projektu
  • W Panelu inspektora po prawej stronie znajdź ustawienie Wtyczka spatializer i wybierz pozycję MS HRTF Spatializer.
  • W folderze Holograms na panelu Projekt przeciągnij obiekt Zogrania na obiekt OrigamiCollection w panelu hierarchii.
  • Wybierz pozycję OrigamiCollection i znajdź składnik Źródło dźwięku w panelu Inspector (Inspektor). Zmień następujące właściwości:
    • Sprawdź właściwość Spatialize .
    • Sprawdź pozycję Odtwórz na jawie.
    • Zmień aplikację Spatial Blend na 3D , przeciągając suwak w prawo. Wartość powinna zostać zmieniona z 0 na 1 po przeniesieniu suwaka.
    • Sprawdź właściwość Loop .
    • Rozwiń węzeł Ustawienia dźwięku 3D i wprowadź wartość 0.1 w polu Poziom dopplera.
    • Ustaw opcję Rolloff woluminu na wartość Logarithmic Rolloff.
    • Ustaw wartość Maksymalna odległość na 20.
  • W folderze Scripts utwórz skrypt o nazwie SphereSounds.
  • Przeciągnij i upuść obiekty SphereSounds do obiektów Sphere1 i Sphere2 w hierarchii.
  • Open SphereSounds w programie Visual Studio zaktualizuj następujący kod i zapisz wszystko.
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();
        }
    }
}
  • Zapisz skrypt i wróć do aparatu Unity.
  • Eksportowanie, kompilowanie i wdrażanie aplikacji na urządzeniu HoloLens.
  • Przenieś się bliżej i dalej od sceny i skręć w bok, aby usłyszeć zmiany dźwięków.

Rozdział 6 — Mapowanie przestrzenne

Teraz użyjemy mapowania przestrzennego , aby umieścić planszę gry na prawdziwym obiekcie w świecie rzeczywistym.

Cele

  • Przynieś swój rzeczywisty świat do świata wirtualnego.
  • Umieść swoje hologramy, gdzie mają największe znaczenie dla Ciebie.

Instrukcje

  • W środowisku Unity kliknij folder Hologramy w panelu Projekt.
  • Przeciągnij zasób mapowania przestrzennego do katalogu głównego hierarchii.
  • Kliknij obiekt Mapowanie przestrzenne w hierarchii.
  • W panelu Inspector (Inspektor) zmień następujące właściwości:
    • Zaznacz pole Rysuj siatki wizualne .
    • Znajdź pozycję Rysuj materiał i kliknij okrąg po prawej stronie. Wpisz "wireframe" w polu wyszukiwania u góry. Kliknij wynik, a następnie zamknij okno. Gdy to zrobisz, wartość Rysuj materiał powinna zostać ustawiona na Wartość Szkielet.
  • Eksportowanie, kompilowanie i wdrażanie aplikacji na urządzeniu HoloLens.
  • Po uruchomieniu aplikacji siatka szkieletowa nakłada świat rzeczywisty.
  • Zobacz, jak kula tocząca się spadnie ze sceny i na podłogę!

Teraz pokażemy, jak przenieść origamiCollection do nowej lokalizacji:

  • W folderze Scripts utwórz skrypt o nazwie TapToPlaceParent.
  • W obszarze Hierarchy rozwiń obiekt OrigamiCollection i wybierz obiekt Stage .
  • Przeciągnij skrypt TapToPlaceParent na obiekt Stage.
  • Otwórz skrypt TapToPlaceParent w programie Visual Studio i zaktualizuj go tak, aby był następujący:
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;
            }
        }
    }
}
  • Eksportowanie, kompilowanie i wdrażanie aplikacji.
  • Teraz powinno być możliwe umieszczenie gry w określonej lokalizacji, patrząc na nią, za pomocą gestu Wybierz, a następnie przechodząc do nowej lokalizacji, a następnie używając gestu Select ponownie.

Rozdział 7 - Zabawa holograficzne

Cele

  • Odsłaniaj wejście do holograficznego świata.

Instrukcje

Teraz pokażemy Ci, jak odkryć holograficzny świat:

  • Z folderu Holograms w panelu projektu:
    • Przeciągnij element Underworld do hierarchii, aby być dzieckiem OrigamiCollection.
  • W folderze Scripts utwórz skrypt o nazwie HitTarget.
  • W hierarchii rozwiń węzeł OrigamiCollection.
  • Rozwiń obiekt Stage i wybierz obiekt Docelowy (niebieski wentylator).
  • Przeciągnij skrypt HitTarget na obiekt Target .
  • Otwórz skrypt HitTarget w programie Visual Studio i zaktualizuj go tak, aby był następujący:
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 środowisku Unity wybierz obiekt Docelowy .
  • Dwie właściwości publiczne są teraz widoczne w składniku Hit Target i muszą odwoływać się do obiektów w naszej scenie:
    • Przeciągnij element Underworld z panelu Hierarchia do właściwości Underworld w składniku Hit Target .
    • Przeciągnij pozycję Etap z panelu Hierarchia do obiektu, aby ukryć właściwość w składniku Hit Target .
  • Eksportowanie, kompilowanie i wdrażanie aplikacji.
  • Umieść kolekcję Origami na podłodze, a następnie użyj gestu Wybierz, aby upuść sferę.
  • Gdy kula uderza w cel (niebieski wentylator), nastąpi eksplozja. Kolekcja będzie ukryta, a pojawi się dziura do underworld.

Koniec

I to koniec tego samouczka!

Wiesz teraz:

  • Jak utworzyć aplikację holograficzną w środowisku Unity.
  • Jak korzystać z spojrzenia, gestu, głosu, dźwięku i mapowania przestrzennego.
  • Jak skompilować i wdrożyć aplikację przy użyciu programu Visual Studio.

Teraz możesz rozpocząć tworzenie własnego środowiska holograficznego!

Zobacz też