Dane wejściowe urządzenia HoloLens (1. generacji) 210: Spojrzenie

Ważne

Samouczki dotyczące akademii Mixed Reality 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 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.

Spojrzenie jest pierwszą formą danych wejściowych i ujawnia intencję i świadomość użytkownika. Mr Input 210 (aka Project Explorer) to szczegółowe omówienie pojęć związanych z spojrzeniem na Windows Mixed Reality. Dodamy świadomość kontekstową do naszych kursorów i hologramów, korzystając w pełni z zalet tego, co twoja aplikacja wie o spojrzeniu użytkownika.

Mamy tutaj przyjaznego astronautę, który pomoże Ci nauczyć się pojęć związanych z spojrzeniem. W MR Basics 101 mieliśmy prosty kursor, który właśnie podążał za spojrzeniem. Dzisiaj przenosimy krok poza prosty kursor:

  • Tworzymy kursor i nasze hologramy z rozpoznawaniem wzroku: oba te elementy zmienią się w zależności od tego, gdzie szuka użytkownik — lub gdzie użytkownik nie szuka. Dzięki temu są one świadome kontekstu.
  • Dodamy opinię do naszych kursorów i hologramów, aby dać użytkownikowi więcej kontekstu na temat tego, co jest celem. Ta opinia może być audio i wizualna.
  • Pokażemy Ci techniki określania celu, aby ułatwić użytkownikom osiągnięcie mniejszych celów.
  • Pokażemy Ci, jak zwrócić uwagę użytkownika na swoje hologramy za pomocą wskaźnika kierunkowego.
  • Nauczymy Cię technik podejmowania hologramów z użytkownikiem podczas poruszania się po świecie.

Ważne

Filmy wideo osadzone w każdym z poniższych rozdziałów zostały nagrane przy użyciu starszej wersji aparatu Unity i zestawu narzędzi Mixed Reality Toolkit. Chociaż instrukcje krok po kroku są dokładne i aktualne, możesz zobaczyć skrypty i wizualizacje w odpowiednich filmach wideo, które są nieaktualne. Filmy wideo pozostają dołączone do potomności i dlatego, że omówione koncepcje nadal mają zastosowanie.

Obsługa urządzeń

Kurs HoloLens Immersyjne zestawy słuchawkowe
Dane wejściowe MR 210: Spojrzenie ✔️ ✔️

Przed rozpoczęciem

Wymagania wstępne

Pliki projektu

  • Pobierz pliki wymagane przez projekt. Wymaga aparatu Unity 2017.2 lub nowszego.
  • Usuń zarchiwizuj pliki na pulpicie lub innym łatwym w osiągnięciu lokalizacji.

Uwaga

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

Errata i notatki

  • W programie Visual Studio pozycja "Just My Code" musi być wyłączona (niezaznaczone) w obszarze Narzędzia-Opcje-Debugowanie>> w celu osiągnięcia punktów przerwania w kodzie.

Rozdział 1 — Konfiguracja aparatu Unity

Cele

  • Optymalizowanie aparatu Unity pod kątem programowania urządzenia HoloLens.
  • Zaimportuj zasoby i skonfiguruj scenę.
  • Wyświetl astronautę na urządzeniu HoloLens.

Instrukcje

  1. Uruchom środowisko Unity.
  2. Wybierz pozycję Nowy projekt.
  3. Nadaj projektowi nazwę ModelExplorer.
  4. Wprowadź lokalizację jako folder Gaze , który wcześniej nie został zarchiwizowany.
  5. Upewnij się, że projekt ma ustawioną wartość 3D.
  6. Kliknij pozycję Create Project (Utwórz projekt).

Ustawienia aparatu Unity dla urządzenia HoloLens

Musimy poinformować aparat Unity, że aplikacja, którą próbujemy wyeksportować, powinna utworzyć widok immersyjny zamiast widoku 2D. Robimy to przez dodanie urządzenia HoloLens jako urządzenia rzeczywistości wirtualnej.

  1. Przejdź do pozycji Edytuj > odtwarzacz ustawień > projektu.
  2. W Panelu inspektora dla ustawień odtwarzacza wybierz ikonę Sklepu Windows .
  3. Rozwiń grupę Ustawienia XR .
  4. W sekcji Renderowanie zaznacz pole wyboru Obsługiwana rzeczywistość wirtualna , aby dodać nową listę zestawów SDK rzeczywistości wirtualnej .
  5. Sprawdź, czy Windows Mixed Reality jest wyświetlana na liście. Jeśli nie, wybierz + przycisk w dolnej części listy i wybierz pozycję Windows Holographic.

Następnie musimy ustawić zaplecze skryptów na platformę .NET.

  1. Przejdź do pozycji Edytuj > odtwarzacz ustawień > projektu (nadal możesz mieć to ustawienie z poprzedniego kroku).
  2. W Panelu inspektora dla ustawień odtwarzacza wybierz ikonę Sklepu Windows .
  3. W sekcji Konfiguracja innych ustawień upewnij się, że dla zaplecza skryptów ustawiono wartość .NET

Na koniec zaktualizujemy nasze ustawienia jakości, aby uzyskać szybką wydajność na urządzeniu HoloLens.

  1. Przejdź do pozycji Edytuj > jakość ustawień > projektu.
  2. Kliknij strzałkę skierowaną w dół w wierszu Domyślnym pod ikoną Sklepu Windows.
  3. Wybierz pozycję Bardzo niski dla aplikacji ze Sklepu Windows.

Importowanie zasobów projektu

  1. Kliknij prawym przyciskiem myszy folder Assets w panelu Projekt .
  2. Kliknij pozycję Importuj pakiet > niestandardowy pakietu.
  3. Przejdź do pobranych plików projektu i kliknij pozycję ModelExplorer.unitypackage.
  4. Kliknij przycisk Otwórz.
  5. Po załadowaniu pakietu kliknij przycisk Importuj .

Konfigurowanie sceny

  1. W hierarchii usuń aparat główny.
  2. W folderze HoloToolkit otwórz folder Input , a następnie otwórz folder Prefabs .
  3. Przeciągnij i upuść prefab prefabMixedRealityCameraParent z folderu Prefabs do hierarchii.
  4. Kliknij prawym przyciskiem myszy światło kierunkowe w hierarchii i wybierz polecenie Usuń.
  5. W folderze Holograms przeciągnij i upuść następujące zasoby w katalogu głównym hierarchii:
    • AstroMan
    • Lampki
    • SpaceAudioSource
    • SpaceBackground
  6. Uruchom tryb ▶ odtwarzania, aby wyświetlić astronautę.
  7. Kliknij ponownie pozycję Tryb ▶ odtwarzania, aby zatrzymać.
  8. W folderze Holograms znajdź element zawartości Fitbox i przeciągnij go do katalogu głównego hierarchii.
  9. Wybierz skrzynkę Fitbox w panelu Hierarchia .
  10. Przeciągnij kolekcję AstroMan z hierarchii do właściwości Kolekcji Hologramu w polu Fitbox w panelu Inspektor .

Zapisywanie projektu

  1. Zapisz nową scenę: Zapisz scenę jako plik>.
  2. Kliknij pozycję Nowy folder i nadaj folderowi nazwę Sceny.
  3. Nadaj plikowi nazwę "ModelExplorer" i zapisz go w folderze Sceny .

Kompilowanie projektu

  1. W akrocie Unity wybierz pozycję Ustawienia kompilacji pliku>.
  2. Kliknij pozycję Dodaj otwarte sceny , aby dodać scenę.
  3. Wybierz platforma uniwersalna systemu Windows na liście Platforma, a następnie kliknij pozycję Przełącz platformę.
  4. Jeśli specjalnie opracowujesz urządzenie HoloLens, ustaw dla urządzenia Target wartośćHoloLens. W przeciwnym razie pozostaw je na dowolnym urządzeniu.
  5. Upewnij się, że dla ustawienia Typ kompilacji ustawiono wartość D3D , a zestaw SDK ma wartość Latest installed (powinien to być zestaw SDK 16299 lub nowszy).
  6. Kliknij pozycję Kompiluj.
  7. Utwórz nowy folder o nazwie "Aplikacja".
  8. Jednym kliknięciem folderu Aplikacja .
  9. Naciśnij pozycję Wybierz folder.

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

  1. Otwórz folder Aplikacja .
  2. Otwórz rozwiązanie ModelExplorer Visual Studio.

W przypadku wdrażania na urządzeniu HoloLens:

  1. Za pomocą górnego paska narzędzi w programie Visual Studio zmień element docelowy z Debuguj na Wydanie i z ARM na x86.
  2. Kliknij strzałkę listy rozwijanej obok przycisku Maszyna lokalna, a następnie wybierz pozycję Maszyna zdalna.
  3. Wprowadź adres IP urządzenia HoloLens i ustaw opcję Tryb uwierzytelniania na uniwersalny (protokół niezaszyfrowany). Kliknij pozycję Wybierz. Jeśli nie znasz adresu IP urządzenia, zapoznaj się z ustawieniami > sieci & Opcje zaawansowane internetu>.
  4. Na górnym pasku menu kliknij pozycję Debuguj —> Rozpocznij 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.
  5. Po wdrożeniu aplikacji odrzuć aplikację Fitbox za pomocą gestu wyboru.

W przypadku wdrażania w immersywnym zestawie słuchawkowym:

  1. Za pomocą górnego paska narzędzi w programie Visual Studio zmień element docelowy z Debuguj na Wydanie i z ARM na x64.
  2. Upewnij się, że element docelowy wdrożenia ma ustawioną wartość Maszyna lokalna.
  3. Na górnym pasku menu kliknij pozycję Debuguj —> Rozpocznij bez debugowania lub naciśnij klawisze Ctrl + F5.
  4. Po wdrożeniu aplikacji odrzuć aplikację Fitbox , ściągając wyzwalacz na kontrolerze ruchu.

Rozdział 2 — Kursor i opinia docelowa

Cele

  • Projektowanie i zachowanie wizualizacji kursora.
  • Opinie na temat kursora opartego na spojrzeniu.
  • Opinie dotyczące hologramu opartego na spojrzeniu.

Zamierzamy oprzeć naszą pracę nad niektórymi zasadami projektowania kursorów, a mianowicie:

  • Kursor jest zawsze obecny.
  • Nie pozwól, aby kursor był zbyt mały lub duży.
  • Unikaj utrudniania zawartości.

Instrukcje

  1. W folderze HoloToolkit\Input\Prefabs znajdź zasób InputManager .
  2. Przeciągnij i upuść element InputManager w hierarchii.
  3. W folderze HoloToolkit\Input\Prefabs znajdź zasób Cursor .
  4. Przeciągnij i upuść kursor na hierarchię.
  5. Wybierz obiekt InputManager w hierarchii.
  6. Przeciągnij obiekt Cursor z hierarchii do pola Cursor kontrolki SimpleSinglePointerSelector elementu InputManager w dolnej części inspektora.

Konfiguracja selektora prostego pojedynczego wskaźnika

Wdróż i konfiguruj

  1. Ponownie skompiluj aplikację z ustawień kompilacji pliku>.
  2. Otwórz folder Aplikacja.
  3. Otwórz rozwiązanie ModelExplorer Visual Studio.
  4. Kliknij pozycję Debuguj —> rozpocznij bez debugowania lub naciśnij klawisze Ctrl + F5.
  5. Zwróć uwagę, jak kursor jest rysowany i jak zmienia wygląd, jeśli dotyka hologramu.

Instrukcje

  1. W panelu Hierarchy (Hierarchia) rozwiń obiekt AstroMan-GEO_G-Back_Center>.>
  2. Kliknij dwukrotnie plik Interactible.cs , aby otworzyć go w programie Visual Studio.
  3. Usuń komentarz z wierszy w wywołaniach zwrotnych IFocusable.OnFocusEnter() i IFocusable.OnFocusExit() w pliku Interactible.cs. Są one wywoływane przez element InputManager zestawu narzędzi Mixed Reality Toolkit, gdy fokus (przez spojrzenie lub wskazywanie kontrolera) przechodzi i zamyka zderzacz określonego obiektu GameObject.
/* TODO: DEVELOPER CODING EXERCISE 2.d */

void IFocusable.OnFocusEnter()
{
    for (int i = 0; i < defaultMaterials.Length; i++)
    {
        // 2.d: Uncomment the below line to highlight the material when gaze enters.
        defaultMaterials[i].EnableKeyword("_ENVIRONMENT_COLORING");
    }
}

void IFocusable.OnFocusExit()
{
    for (int i = 0; i < defaultMaterials.Length; i++)
    {
        // 2.d: Uncomment the below line to remove highlight on material when gaze exits.
        defaultMaterials[i].DisableKeyword("_ENVIRONMENT_COLORING");
    }
}

Uwaga

Używamy i EnableKeywordDisableKeyword powyżej. Aby można było ich używać we własnej aplikacji za pomocą cieniowania standardowego zestawu narzędzi, należy postępować zgodnie z wytycznymi aparatu Unity dotyczącymi uzyskiwania dostępu do materiałów za pomocą skryptu. W tym przypadku uwzględniliśmy już trzy warianty wyróżnionego materiału potrzebnego w folderze Resources (poszukaj trzech materiałów z wyróżnieniem w nazwie).

Wdróż i konfiguruj

  1. Tak jak poprzednio, skompiluj projekt i wdróż go na urządzeniu HoloLens.
  2. Obserwuj, co się dzieje, gdy spojrzenie jest skierowane do obiektu i kiedy nie jest.

Rozdział 3 — Techniki określania wartości docelowej

Cele

  • Ułatwianie określania docelowych hologramów.
  • Stabilizuj naturalne ruchy głowy.

Instrukcje

  1. W panelu Hierarchy (Hierarchia ) wybierz obiekt InputManager .
  2. Na panelu Inspector (Inspektor ) znajdź skrypt Stabilizatora spojrzenia . Kliknij go, aby otworzyć w programie Visual Studio, jeśli chcesz spojrzeć.
    • Ten skrypt iteruje próbki danych Raycast i pomaga ustabilizować spojrzenie użytkownika na precyzyjne określanie wartości docelowej.
  3. W inspektorze można edytować wartość Przechowywane próbki stabilności . Ta wartość reprezentuje liczbę próbek, dla których stabilizator iteruje w celu obliczenia wartości stabilizowanej.

Rozdział 4 — wskaźnik kierunkowy

Cele

  • Dodaj wskaźnik kierunkowy na kursorze, aby ułatwić znajdowanie hologramów.

Instrukcje

Użyjemy pliku DirectionIndicator.cs , który:

  1. Pokaż wskaźnik kierunkowy, jeśli użytkownik nie patrzy na hologramy.
  2. Ukryj wskaźnik kierunkowy, jeśli użytkownik patrzy na hologramy.
  3. Zaktualizuj wskaźnik kierunkowy, aby wskazywał hologramy.

Zaczynajmy.

  1. Kliknij obiekt AstroMan w panelu Hierarchy (Hierarchia ), a następnie kliknij strzałkę , aby ją rozwinąć.
  2. W panelu Hierarchy (Hierarchia ) wybierz obiekt DirectionalIndicator w obszarze AstroMan.
  3. W panelu Inspector (Inspektor ) kliknij przycisk Add Component (Dodaj składnik ).
  4. W menu wpisz w polu wyszukiwania Wskaźnik kierunku. Wybierz wynik wyszukiwania.
  5. Na panelu Hierarchia przeciągnij i upuść obiekt Cursor na właściwość Cursor w inspektorze.
  6. Na panelu Projekt w folderze Hologramy przeciągnij i upuść zasóbDirectionalIndicator na właściwość Wskaźnik kierunkowy w inspektorze.
  7. Skompiluj i wdróż aplikację.
  8. Zobacz, jak obiekt wskaźnika kierunkowego pomaga znaleźć astronautę.

Rozdział 5 — Billboardowanie

Cele

  • Użyj billboardów, aby hologramy zawsze twarzą w kierunku Ciebie.

Będziemy używać pliku Billboard.cs , aby zachować obiekt GameObject zorientowany tak, że stoi on przed użytkownikiem przez cały czas.

  1. W panelu Hierarchy (Hierarchia ) wybierz obiekt AstroMan .
  2. W panelu Inspector (Inspektor ) kliknij przycisk Add Component (Dodaj składnik ).
  3. W menu wpisz pole wyszukiwania Billboard. Wybierz wynik wyszukiwania.
  4. W inspektorze ustaw oś przestawną na Y.
  5. Wypróbuj! Skompiluj i wdróż aplikację tak jak wcześniej.
  6. Zobacz, jak obiekt Billboard stoi bez względu na sposób zmiany punktu widzenia.
  7. Usuń skrypt z narzędzia AstroMan na razie.

Rozdział 6 — Tag-Along

Cele

  • Użyj Tag-Along, aby nasze hologramy podążały za nami w pomieszczeniu.

Podczas pracy nad tym problemem będziemy kierować się następującymi ograniczeniami projektowymi:

  • Zawartość powinna zawsze być od razu.
  • Zawartość nie powinna być w ten sposób.
  • Zawartość blokująca głowę jest niewygodna.

Rozwiązanie używane w tym miejscu polega na użyciu podejścia "tag-along".

Obiekt tagu nigdy nie pozostawia widoku użytkownika. Tag można traktować jako obiekt przymocowany do głowy użytkownika przez gumowe paski. Gdy użytkownik porusza się, zawartość pozostanie w łatwym spojrzeniu, przesuwając się w kierunku krawędzi widoku bez całkowitego opuszczenia. Gdy użytkownik patrzy w kierunku obiektu wzdłuż tagu, staje się bardziej w pełni dostępny.

Użyjemy pliku SimpleTagalong.cs , który będzie:

  1. Ustal, czy obiekt Tag-Along znajduje się w granicach aparatu.
  2. Jeśli nie w widoku frustum, umieść Tag-Along częściowo w obrębie frustum widoku.
  3. W przeciwnym razie umieść Tag-Along na domyślną odległość od użytkownika.

Aby to zrobić, najpierw należy zmienić skrypt Interactible.cs , aby wywołać tagalongAction.

  1. Edytuj plik Interactible.cs , wykonując ćwiczenie kodowania 6.a (odkokowywanie wierszy od 84 do 87).
/* TODO: DEVELOPER CODING EXERCISE 6.a */
// 6.a: Uncomment the lines below to perform a Tagalong action.
if (interactibleAction != null)
{
    interactibleAction.PerformAction();
}

Skrypt InteractibleAction.cs w połączeniu z elementem Interactible.cs wykonuje niestandardowe akcje po naciśnięciu na hologramach. W tym przypadku użyjemy jednego specjalnie dla tagów.

  • W folderze Scripts (Skrypty) kliknij element zawartości TagalongAction.cs , aby otworzyć go w programie Visual Studio.
  • Ukończ ćwiczenie kodowania lub zmień go na następujące:
    • W górnej części hierarchii na pasku wyszukiwania wpisz ChestButton_Center i wybierz wynik.
    • W panelu Inspector (Inspektor) kliknij przycisk Add Component (Dodaj składnik ).
    • W menu wpisz ciąg Tagalong Action w polu wyszukiwania. Wybierz wynik wyszukiwania.
    • W folderze Holograms znajdź zasóbTagalong .
    • Wybierz obiekt ChestButton_Center w hierarchii. Przeciągnij i upuść obiekt TagAlong z panelu Project na właściwość Inspector do właściwości Object To Tagalong .
    • Przeciągnij obiekt akcji Tagalong z inspektora do pola Akcja w interakcji w skrypcie wchodzić w interakcję .
  • Kliknij dwukrotnie skrypt TagalongAction , aby otworzyć go w programie Visual Studio.

Konfiguracja z możliwością interakcji

Musimy dodać następujące elementy:

  • Dodaj funkcje do funkcji PerformAction w skrypcie TagalongAction (dziedziczone z funkcji InteractibleAction).
  • Dodaj billboardy do obiektu patrzącego i ustaw oś przestawną na XY.
  • Następnie dodaj proste Tag-Along do obiektu.

Oto nasze rozwiązanie z witryny TagalongAction.cs:

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using HoloToolkit.Unity;
using UnityEngine;

public class TagalongAction : InteractibleAction
{
    [SerializeField]
    [Tooltip("Drag the Tagalong prefab asset you want to display.")]
    private GameObject objectToTagalong;

    private void Awake()
    {
        if (objectToTagalong != null)
        {
            objectToTagalong = Instantiate(objectToTagalong);
            objectToTagalong.SetActive(false);

            /* TODO: DEVELOPER CODING EXERCISE 6.b */

            // 6.b: AddComponent Billboard to objectToTagAlong,
            // so it's always facing the user as they move.
            Billboard billboard = objectToTagalong.AddComponent<Billboard>();

            // 6.b: AddComponent SimpleTagalong to objectToTagAlong,
            // so it's always following the user as they move.
            objectToTagalong.AddComponent<SimpleTagalong>();

            // 6.b: Set any public properties you wish to experiment with.
            billboard.PivotAxis = PivotAxis.XY; // Already the default, but provided in case you want to edit
        }
    }

    public override void PerformAction()
    {
        // Recommend having only one tagalong.
        if (objectToTagalong == null || objectToTagalong.activeSelf)
        {
            return;
        }

        objectToTagalong.SetActive(true);
    }
}
  • Wypróbuj! Skompiluj i wdróż aplikację.
  • Zobacz, jak zawartość jest zgodna z centrum punktu widzenia, ale nie stale i bez blokowania.