HoloLens (1. generacja) Dane wejściowe 210: spojrzenie

Ważne

Samouczki Mixed Reality Academy zostały zaprojektowane z myślą o HoloLens (1. generacji), a także unity 2017 i Mixed Reality immersywnych zestawów nagłownych. W związku z tym uważamy, że ważne jest pozostawienie tych samouczków dla deweloperów, którzy nadal szukają wskazówek dotyczących opracowywania aplikacji dla tych urządzeń. Te samouczki nie zostaną zaktualizowane o najnowsze zestawy narzędzi ani interakcje używane w wersji HoloLens 2 i mogą nie być zgodne z nowszą 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 (czyli Project Explorer) to głębokie wprowadzenie do pojęć związanych z Windows Mixed Reality. Dodamy do kursora i hologramów świadomość kontekstową, w pełni korzystając z wiedzy aplikacji o spojrzeniach użytkownika.

Mamy przyjaznego astronautę, który pomoże Ci poznać pojęcia związane z spojrzeniem. W wersji MR Basics 101mieliśmy prosty kursor, który właśnie śledził Twoje spojrzenie. Dzisiaj przenosimy o krok poza prosty kursor:

  • Dajemy do świadomość kursora i naszych hologramów: obie zmienią się w zależności od tego, gdzie użytkownik patrzy — lub gdzie użytkownik nie patrzy. Dzięki temu są kontekstowe.
  • Dodamy opinię do kursora i hologramów, aby zapewnić użytkownikowi więcej kontekstu docelowego. Ta opinia może być dźwiękowa i wizualna.
  • Pokażemy Ci techniki określania celu, aby pomóc użytkownikom osiągnąć mniejsze cele.
  • Pokażemy Ci, jak zwrócić uwagę użytkownika na hologramy za pomocą wskaźnika kierunkowego.
  • Nauczymy Cię technik, które przyjmą Twoje hologramy z użytkownikiem podczas poruszania się po świecie.

Ważne

Filmy wideo osadzone w poszczególnych rozdziałach poniżej zostały zarejestrowane przy użyciu starszej wersji aparatu Unity i zestawu Mixed Reality Toolkit. Instrukcje krok po kroku są dokładne i aktualne, ale w odpowiednich filmach wideo mogą być teraz dostępne skrypty i wizualizacje, które są aktualne. Filmy wideo pozostają dołączone dla plakatu i ponieważ te koncepcje nadal mają zastosowanie.

Obsługa urządzeń

Kurs HoloLens Immersywne zestawy nagłow
MR Input 210: Spojrzenie ✔️ ✔️

Przed rozpoczęciem

Wymagania wstępne

Project plików

  • Pobierz pliki wymagane przez projekt. Wymaga aparatu Unity 2017.2 lub nowszego.
  • Zarchiwizuj pliki na pulpicie lub w innej łatwo dostępnej lokalizacji.

Uwaga

Jeśli chcesz sprawdzić kod źródłowy przed pobraniem, jest on dostępny naGitHub .

Errata i uwagi

  • W Visual Studio opcja "Tylko mój kod" musi być wyłączona (niezaznaczone) w obszarze Narzędzia->Opcje->Debugowanie, aby trafić punkty przerwania w kodzie.

Rozdział 1 — Konfiguracja aparatu Unity

Cele

  • Zoptymalizuj platformę Unity HoloLens tworzenia aplikacji.
  • Zaimportuj zasoby i skonfiguruj scenę.
  • Wyświetl astronautę w HoloLens.

Instrukcje

  1. Uruchom platformę Unity.
  2. Wybierz pozycję Nowy projekt.
  3. Nadaj projektowi nazwę ModelExplorer.
  4. Wprowadź location jako folder Gaze, który został wcześniej zarchiwizowane.
  5. Upewnij się, że projekt został ustawiony na 3D.
  6. Kliknij pozycję Create Project (Utwórz projekt).

Ustawienia aparatu Unity dla HoloLens

Musimy wiedzieć, że aplikacja, która próbujemy wyeksportować, powinna tworzyć widok immersywny, a nie widok 2D. W tym celu dodamy HoloLens jako urządzenie rzeczywistości wirtualnej.

  1. Przejdź do menu Edit > Project Ustawienia > Player (Edytuj > Project Ustawienia > Player).
  2. W panelu Inspector for Player Ustawienia (Panel inspektora dla Ustawienia) wybierz ikonę Windows Store.
  3. Rozwiń grupę Ustawienia XR.
  4. W sekcji Renderowanie zaznacz pole wyboru Virtual Reality Supported (Obsługiwana rzeczywistość wirtualna), aby dodać nową listę zestawów SDK rzeczywistości wirtualnej.
  5. Sprawdź, Windows Mixed Reality jest wyświetlana na liście. Jeśli nie, wybierz przycisk w dolnej części listy, a następnie wybierz pozycję + Windows Holographic.

Następnie musimy ustawić nasze zaplecza obsługi skryptów na .NET.

  1. Przejdź do > Project Ustawienia > Player (może to być nadal z poprzedniego kroku).
  2. W panelu Inspector for Player Ustawienia (Panel inspektora dla Ustawienia) wybierz ikonę Windows Store.
  3. W sekcji Other Ustawienia Configuration (Inne Ustawienia konfiguracji) upewnij się, że dla zaplecza skryptów ustawiono wartość .NET

Na koniec zaktualizujemy nasze ustawienia jakości, aby osiągnąć szybką wydajność na HoloLens.

  1. Przejdź do menu Edytuj > Project Ustawienia > Jakości.
  2. Kliknij strzałkę skierowaną w dół w wierszu Domyślny pod ikoną Windows Store.
  3. Wybierz pozycję Bardzo niska dla Windows Store.

Importowanie zasobów projektu

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

Konfigurowanie sceny

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

Zapisywanie projektu

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

Kompilowanie projektu

  1. W a aparatu Unity wybierz pozycję File > Build Ustawienia.
  2. Kliknij pozycję Dodaj otwarte sceny, aby dodać scenę.
  3. Wybierz pozycję Universal Windows Platform (Platforma uniwersalna) na liście Platform (Platforma) i kliknij pozycję Switch Platform (Przełącz platformę).
  4. Jeśli specjalnie opracowujesz dla aplikacji HoloLens, dla ustawienia Urządzenie docelowe ustaw wartość HoloLens. W przeciwnym razie pozostaw je na dowolnym urządzeniu.
  5. Upewnij się, że dla ustawienia Typ kompilacji ustawiono D3D, a dla zestawu SDK ustawiono najnowszą wersję zainstalowaną (która powinna być zestawem SDK w wersji 16299 lub nowszej).
  6. Kliknij pozycję Build (Kompilacja).
  7. Utwórz nowy folder o nazwie "App".
  8. Kliknij pojedynczo folder App.
  9. Naciśnij pozycję Wybierz folder.

Gdy unity zostanie gotowe, zostanie Eksplorator plików okno.

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

W przypadku wdrażania w HoloLens:

  1. Korzystając z górnego paska narzędzi w Visual Studio, zmień element docelowy z Debugowanie 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 HoloLens i ustaw tryb uwierzytelniania na wartość Universal (Unencrypted Protocol) ( Uniwersalny (protokół niezaszyfrowany). Kliknij pozycję Wybierz. Jeśli nie znasz adresu IP urządzenia, sprawdź w te Ustawienia > Network & Internet > Advanced Options (Opcje zaawansowane).
  4. Na górnym pasku menu kliknij pozycję Debuguj — > uruchom bez debugowania lub naciśnij klawisze Ctrl +F5. Jeśli jest to pierwsze wdrożenie na urządzeniu, należy je sparować z Visual Studio .
  5. Po wdrożeniu aplikacji odrzuć opcję Fitbox za pomocą gestu select.

W przypadku wdrażania do immersywnego zestawu nagłownego:

  1. Korzystając z górnego paska narzędzi w Visual Studio, zmień element docelowy z Debugowanie na Wydanie i z ARM na x64.
  2. Upewnij się, że element docelowy wdrożenia został ustawiony na wartość Komputer lokalny.
  3. Na górnym pasku menu kliknij pozycję Debuguj — > uruchom bez debugowania lub naciśnij klawisze Ctrl +F5.
  4. Po wdrożeniu aplikacji odrzuć aplikację Fitbox, ściągając wyzwalacz na kontroler ruchu.

Rozdział 2 — Opinia kursora i celu

Cele

  • Projekt i zachowanie wizualizacji kursora.
  • Opinia kursora oparta na spojrzeniach.
  • Opinie na temat hologramu opartego na spojrzeniach.

Będziemy opierać swoją pracę na pewnych zasadach projektowania kursorów, a mianowicie:

  • Kursor jest zawsze obecny.
  • Nie pozwól, aby kursor był zbyt mały ani duży.
  • Unikaj zaciemniania 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 Kursor.
  4. Przeciągnij kursor i upuść go w hierarchii.
  5. Wybierz obiekt InputManager w hierarchii.
  6. Przeciągnij obiekt Cursor z hierarchii do pola Cursor klasy SimpleSinglePointerSelector klasy InputManager w dolnej części inspektora.

Konfiguracja prostego selektora pojedynczego wskaźnika

Wdróż i konfiguruj

  1. Skompilowanie aplikacji z pliku > kompilacji Ustawienia.
  2. Otwórz folder App .
  3. Otwórz rozwiązanie ModelExplorer Visual Studio .
  4. Kliknij pozycję Debuguj > Uruchom bez debugowania lub naciśnij klawisze Ctrl +F5.
  5. Obserwuj, jak kursor jest rysowany i jak zmienia wygląd, jeśli dotyka hologramu.

Instrukcje

  1. W panelu Hierarchy (Hierarchia) rozwiń GEO_G Back_Center -> -> AstroMan.
  2. Kliknij dwukrotnie pozycję Interactible.cs, aby otworzyć go w Visual Studio.
  3. Odkomentuj wiersze w wywołaniach zwrotnych IFocusable.OnFocusEnter() i IFocusable.OnFocusExit() w interactible.cs. Są one wywoływane przez menedżera InputManager zestawu narzędzi Mixed Reality Toolkit, gdy fokus (przez spojrzenie lub przez kontroler) wchodzi do kolidatora określonego gameObject i zamyka go.
/* 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 EnableKeyword i DisableKeyword powyżej. Aby korzystać z nich we własnej aplikacji za pomocą cieniowania Standard toolkit, należy postępować zgodnie z wytycznymi aparatu Unity dotyczącymi uzyskiwania dostępu do materiałów za pośrednictwem skryptu. W tym przypadku zostały już uwzględnione trzy warianty wyróżnienia materiału potrzebne w folderze Zasoby (poszukaj trzech materiałów z wyróżnieniami w nazwie).

Wdróż i konfiguruj

  1. Tak jak wcześniej skompilować projekt i wdrożyć go w HoloLens.
  2. Obserwuj, co się dzieje, gdy spojrzenie jest skierowane do obiektu, a kiedy nie jest.

Rozdział 3 — Techniki określania celu

Cele

  • Ułatwiaj kierowanie hologramów do celu.
  • Ustabilizowanie naturalnych ruchów głowy.

Instrukcje

  1. W panelu Hierarchy (Hierarchia) wybierz obiekt InputManager.
  2. Na panelu Inspector (Inspektor) znajdź skrypt Gaze Stabilizer (Stabilizator spojrzenia). Kliknij go, aby otworzyć Visual Studio, jeśli chcesz się przyjrzeć.
    • Ten skrypt iteruje po próbkach danych Raycast i pomaga ustabilizować spojrzenie użytkownika na precyzję określania celu.
  3. W oknie Inspector(Inspektor) możesz edytować wartość Stored Stability Samples (Przechowywane próbki stabilności). Ta wartość reprezentuje liczbę próbek, w których stabilizator iteruje w celu obliczenia wartości ustabilizowanej.

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 wskazać hologramy.

Zaczynajmy.

  1. Kliknij obiekt AstroMan w panelu Hierarchy (Hierarchia) i kliknij strzałkę, aby go rozwinąć.
  2. W panelu Hierarchy (Hierarchia) wybierz obiekt DirectionalIndicator w obszarze AstroMan.
  3. Na panelu Inspector (Inspektor) kliknij przycisk Add Component (Dodaj składnik).
  4. W menu wpisz w polu wyszukiwania Wskaźnik kierunku. Wybierz wynik wyszukiwania.
  5. W panelu Hierarchia przeciągnij i upuść obiekt Cursor we właściwości Cursor w kontrolce Inspector.
  6. Na panelu Project w folderze Hologramy przeciągnij i upuść zasób DirectionalIndicator na właściwość Directional Indicator w inspektorze.
  7. Skompilowanie i wdrożenie aplikacji.
  8. Zobacz, jak kierunkowy obiekt wskaźnika pomaga znaleźć astronautę.

Rozdział 5 — Migotowanie

Cele

  • Użyj funkcji ing, aby hologramy zawsze były twarzą w stosunku do Ciebie.

Będziemy używać pliku Dostęp.cs, aby obiekt GameObject był zorientowany w taki sposób, że przez cały czas jest on skierowany do użytkownika.

  1. W panelu Hierarchy (Hierarchia) wybierz obiekt AstroMan.
  2. Na panelu Inspector (Inspektor) kliknij przycisk Add Component (Dodaj składnik).
  3. W menu wpisz w polu wyszukiwania Opcję. Wybierz wynik wyszukiwania.
  4. W kontrolce Inspector (Inspektor) ustaw oś przestawną na Y.
  5. Wypróbuj! Skompilować i wdrożyć aplikację tak jak wcześniej.
  6. Zobacz, jak obiekt Zdumiejętny napotyka Cię niezależnie od tego, jak zmieniasz punkt widzenia.
  7. Na razie usuń skrypt z AstroMan.

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 projektu:

  • Zawartość powinna zawsze być na pierwszy rzut oka.
  • Zawartość nie powinna być w drodze.
  • Blokowanie zawartości jest niesłyszące.

Rozwiązaniem używanym w tym miejscu jest użycie podejścia "tag-along".

Obiekt z tagiem nigdy nie opuszcza w pełni widoku użytkownika. Tag można nazwać obiektem dołączonym do głowy użytkownika za pomocą gumowych pasków. Gdy użytkownik się przesuwa, zawartość pozostanie na pierwszy rzut oka, przesuwając się w kierunku krawędzi widoku bez całkowitego wychodzenia. Gdy użytkownik spojrzy w kierunku obiektu z tagami, jest on bardziej w pełni dostępny.

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

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

Aby to zrobić, najpierw musimy zmienić skrypt Interactible.cs w celu wywołania akcji TagalongAction.

  1. Edytuj pozycję Interactible.cs, kończąc ćwiczenie kodowania 6.a (cokłoń wiersze 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 sparowany z plikiem Interactible.cs wykonuje akcje niestandardowe po naciśnięciu hologramów. W tym przypadku użyjemy jednego z nich specjalnie do tagów.

  • W folderze Skrypty kliknij zasób TagalongAction.cs, aby otworzyć go w Visual Studio.
  • Wykonaj ćwiczenie dotyczące kodowania lub zmień je na:
    • 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 w polu wyszukiwania Tagalong Action (Akcja Tagalong). Wybierz wynik wyszukiwania.
    • W Hologramy znajdź zasób Tagalong.
    • Wybierz ChestButton_Center w hierarchii. Przeciągnij i upuść obiekt TagAlong z panelu Project do inspektora do właściwości Object To Tagalong.
    • Przeciągnij obiekt Akcja Tagalong z pola Inspector (Inspektor) do pola Interactible Action (Akcja w interakcji) w skrypcie Interakcji.
  • Kliknij dwukrotnie skrypt TagalongAction, aby otworzyć go w Visual Studio.

Konfiguracja w interakcji

Musimy dodać następujące elementy:

  • Dodaj funkcje do funkcji PerformAction w skrypcie TagalongAction (odziedziczonym po interactibleAction).
  • Dodaj do obiektu w widoku i ustaw oś przestawną na XY.
  • Następnie dodaj 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! Skompilowanie i wdrożenie aplikacji.
  • Zobacz, jak zawartość podąża za centrum punktu spojrzenia, ale nie w sposób ciągły i bez blokowania go.