HoloLens (1-го поколения) Input 210: Gaze

Важно!

Учебники по Смешанная реальность Академии были разработаны с учетом HoloLens (1-го поколения), Unity 2017 и Смешанная реальность иммерсивных гарнитур. Поэтому мы считаем, что важно оставить эти руководства для разработчиков, которые ищут рекомендации по разработке для этих устройств. Эти руководства не будут обновлены с учетом последних наборов инструментов или взаимодействий, используемых для HoloLens 2 и могут быть несовместимы с более новыми версиями Unity. Они будут сохранены для работы на поддерживаемых устройствах. Опубликован новый цикл руководств для HoloLens 2.

Взгляд является первой формой ввода данных и показывает намерение и осведомленность пользователя. Входные данные 210 смешанной реальности (project Обозреватель) — это глубокое изучение концепций, связанных с взглядом, для Windows Mixed Reality. Мы добавим контекстную осведомленность к нашему курсору и голограммам, используя все преимущества, которые ваше приложение знает о взгляде пользователя.

У нас есть дружелюбный астронавт, который поможет вам изучить концепции взгляда. В MR Basics 101 у нас был простой курсор, который просто следовал за вашим взглядом. Сегодня мы переходим за рамки простого курсора:

  • Мы делаем курсор и голограммы с учетом взгляда: оба будут изменяться в зависимости от того, где пользователь смотрит или где пользователь не ищет. Это позволяет им учитывать контекст.
  • Мы добавим обратную связь к курсору и голограммам, чтобы предоставить пользователю более подробный контекст о том, что является целевым. Эти отзывы могут быть звуковыми и визуальными.
  • Мы покажем вам методы нацеливания, чтобы помочь пользователям достичь небольших целевых объектов.
  • Мы покажем, как привлечь внимание пользователя к голограммам с помощью индикатора направления.
  • Мы научим вас использовать голограммы вместе с пользователем при перемещении в вашем мире.

Важно!

Видео, внедренные в каждую из приведенных ниже глав, были записаны с помощью более старой версии Unity и Смешанная реальность Toolkit. Хотя пошаговые инструкции являются точными и актуальными, сценарии и визуальные элементы могут отображаться в соответствующих видео, которые устарели. Видео по-прежнему включены для потомков и потому, что рассматриваемые концепции по-прежнему применяются.

Поддержка устройств

Курс HoloLens Иммерсивные гарнитуры
210. Ввод в смешанной реальности: Взгляд ✔️ ✔️

Прежде чем начать

Предварительные условия

Файлы проекта

  • Скачайте файлы , необходимые для проекта. Требуется Unity 2017.2 или более поздней версии.
  • Разархивируйте файлы на рабочем столе или в другом удобном расположении.

Примечание

Если вы хотите просмотреть исходный код перед скачиванием, он доступен на GitHub.

Errata и заметки

  • В Visual Studio для попадания в точки останова в коде необходимо отключить (снять флажок) "Только мой код" в разделе Сервис-Параметры-Отладка>>.

Глава 1. Настройка Unity

Задачи

  • Оптимизация Unity для разработки решений для HoloLens.
  • Импорт ресурсов и настройка сцены.
  • Просмотр астронавта в HoloLens.

Instructions

  1. Запустите Unity.
  2. Выберите Создать проект.
  3. Назовите проект ModelExplorer.
  4. Введите расположение в качестве папки Gaze , которая была ранее не архивирована.
  5. Задайте для проекта значение 3D.
  6. Нажмите кнопку Создать проект.

Параметры Unity для HoloLens

Нам нужно сообщить Unity, что приложение, которое мы пытаемся экспортировать, должно создать иммерсивное представление вместо двухмерного. Для этого мы добавляем HoloLens в качестве устройства виртуальной реальности.

  1. Перейдите в раздел Изменение > параметров > проекта Проигрыватель.
  2. На панели инспектора для параметров проигрывателя щелкните значок Магазина Windows .
  3. Разверните группу XR Settings (Параметры XR).
  4. В разделе Отрисовка установите флажок Virtual Reality Supported (Поддержка виртуальной реальности), чтобы добавить новый список Virtual Reality SDKs (SDK виртуальной реальности).
  5. Убедитесь, что Windows Mixed Reality отображается в списке. В противном случае нажмите кнопку + в нижней части списка и выберите Windows Holographic.

Далее необходимо задать для серверной части скриптов .NET.

  1. Перейдите в раздел Изменение > проигрывателя параметров > проекта (возможно, вы все еще используете этот параметр на предыдущем шаге).
  2. На панели инспектора для параметров проигрывателя щелкните значок Магазина Windows .
  3. В разделе Конфигурация других параметров убедитесь, что для параметра Серверная часть сценариев задано значение .NET.

Наконец, мы обновим параметры качества, чтобы добиться высокой производительности в HoloLens.

  1. Перейдите в раздел Изменение > качества > параметров проекта.
  2. Щелкните стрелку вниз в строке По умолчанию под значком Магазина Windows.
  3. Выберите Очень низкий для приложений Магазина Windows.

Импорт ресурсов проекта

  1. Щелкните правой кнопкой мыши папку Assets на панели Проект .
  2. Щелкните Import Package Custom Package (Импорт пользовательского пакета пакета>).
  3. Перейдите к скачанным файлам проекта и щелкните ModelExplorer.unitypackage.
  4. Нажмите кнопку Открыть.
  5. После загрузки пакета нажмите кнопку Импорт .

Настройка сцены

  1. В иерархии удалите основную камеру.
  2. В папке HoloToolkit откройте папку Входные данные , а затем откройте папку Prefabs .
  3. Перетащите заготовку MixedRealityCameraParent из папки Prefabs в иерархию.
  4. Щелкните правой кнопкой мыши направленный свет в иерархии и выберите Удалить.
  5. В папке Holograms перетащите следующие ресурсы в корень иерархии:
    • AstroMan
    • Освещение
    • SpaceAudioSource
    • SpaceBackground
  6. Запустите режим ▶ воспроизведения, чтобы просмотреть астронавта.
  7. Нажмите кнопку Режим ▶ воспроизведения еще раз, чтобы остановить.
  8. В папке Holograms найдите ресурс Fitbox и перетащите его в корень иерархии.
  9. Выберите Fitbox на панели Иерархия .
  10. Перетащите коллекцию AstroMan из Hierarchy в свойство Коллекция голограмм в поле Fitbox на панели Инспектор .

Сохранение проекта

  1. Сохранить новую сцену: Файл > Сохранить сцену как.
  2. Щелкните Создать папку и назовите папку Scenes.
  3. Присвойте файлу имя ModelExplorer и сохраните его в папке Scenes .

Построение проекта

  1. В Unity выберите Параметры сборки файлов>.
  2. Щелкните Добавить открытые сцены , чтобы добавить сцену.
  3. Выберите универсальная платформа Windows в списке Платформа и щелкните Переключить платформу.
  4. Если вы разрабатываете специально для HoloLens, задайте для параметра Целевое устройство значение HoloLens. В противном случае оставьте его в поле Любое устройство.
  5. Убедитесь, что для параметра Тип сборки задано значение D3D , а для пакета SDKзначение Последняя установленная версия (это должен быть пакет SDK 16299 или более поздней версии).
  6. Щелкните Построить.
  7. Создайте новую папку с именем App.
  8. Щелкните папку App одним щелчком.
  9. Нажмите кнопку Выбрать папку.

По завершении работы Unity появится окно проводник.

  1. Откройте папку Приложение .
  2. Откройте решение ModelExplorer Для Visual Studio.

При развертывании в HoloLens:

  1. С помощью верхней панели инструментов в Visual Studio измените целевой объект с Отладка на Выпуск и с ARM на x86.
  2. Щелкните стрелку раскрывающегося списка рядом с кнопкой Локальный компьютер и выберите Удаленный компьютер.
  3. Введите IP-адрес устройства HoloLens и задайте для параметра Режим проверки подлинности значение Универсальный (незашифрованный протокол). Нажмите кнопку Выбрать. Если вы не знаете IP-адрес устройства, просмотрите раздел Параметры > Сеть & Дополнительные параметры браузера>.
  4. В верхней строке меню выберите Отладка —> запуск без отладки или нажмите клавиши CTRL+F5. Если развертывание выполняется на устройстве впервые, необходимо связать его с Visual Studio.
  5. После развертывания приложения закройте Fitbox жестом выбора.

При развертывании в иммерсивной гарнитуре:

  1. С помощью верхней панели инструментов в Visual Studio измените целевой объект с Отладка на Выпуск и с ARM на x64.
  2. Убедитесь, что для целевого объекта развертывания задано значение Локальный компьютер.
  3. В верхней строке меню выберите Отладка —> запуск без отладки или нажмите клавиши CTRL+F5.
  4. После развертывания приложения закройте Fitbox , натянув триггер на контроллере движения.

Глава 2. Обратная связь по курсорам и целевым объектам

Задачи

  • Визуальное проектирование и поведение курсора.
  • Обратная связь курсора на основе взгляда.
  • Обратная связь голограммы на основе взгляда.

Мы будем основывать нашу работу на некоторых принципах проектирования курсоров, а именно:

  • Курсор всегда присутствует.
  • Не позволяйте курсору быть слишком маленьким или большим.
  • Избегайте препятствий для содержимого.

Instructions

  1. В папке HoloToolkit\Input\Prefabs найдите ресурс InputManager .
  2. Перетащите InputManager в иерархию.
  3. В папке HoloToolkit\Input\Prefabs найдите ресурс Cursor .
  4. Перетащите курсор на иерархию.
  5. Выберите объект InputManager в иерархии.
  6. Перетащите объект Cursor из hierarchy в поле Cursor Объекта InputManager SimpleSinglePointerSelector в нижней части инспектора.

Настройка простого селектора с одним указателем

Построение и Развертывание

  1. Перестройте приложение в разделе Параметры сборки файла>.
  2. Откройте папку Приложение.
  3. Откройте решение ModelExplorer Для Visual Studio.
  4. Щелкните Отладка —> запуск без отладки или нажмите клавиши CTRL+F5.
  5. Понаблюдайте за тем, как курсор рисуется и как он изменяет внешний вид при касании голограммы.

Instructions

  1. На панели Иерархия разверните объект AstroMan-GEO_G-Back_Center>.>
  2. Дважды щелкните файл Interactible.cs , чтобы открыть его в Visual Studio.
  3. Раскомментируйте строки в обратных вызовах IFocusable.OnFocusEnter() и IFocusable.OnFocusExit() в Файле Interactible.cs. Они вызываются inputManager Смешанная реальность Toolkit, когда фокус (взгляд или указатель контроллера) входит в определенный коллайдер 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");
    }
}

Примечание

Мы используем EnableKeyword и DisableKeyword выше. Чтобы использовать их в собственном приложении со стандартным шейдером набора средств, необходимо следовать рекомендациям Unity по доступу к материалам с помощью скрипта. В этом случае мы уже включили три варианта выделенного материала, необходимого в папку Ресурсы (найдите три материала с выделением в имени).

Построение и Развертывание

  1. Как и ранее, выполните сборку проекта и разверните его в HoloLens.
  2. Понаблюдайте за тем, что происходит, когда взгляд направлен на объект, а когда его нет.

Глава 3. Методы нацеливания

Задачи

  • Упрощение нацеливания на голограммы.
  • Стабилизировать естественные движения головы.

Instructions

  1. На панели Иерархия выберите объект InputManager .
  2. На панели Инспектор найдите скрипт Стабилизатор взгляда . Щелкните его, чтобы открыть в Visual Studio, если вы хотите посмотреть.
    • Этот скрипт выполняет итерацию по образцам данных Raycast и помогает стабилизировать взгляд пользователя для точного нацеливания.
  3. В инспекторе можно изменить значение Хранимые примеры стабильности . Это значение представляет количество выборок, по которым стабилизатор выполняет итерацию для вычисления стабилизированного значения.

Глава 4. Индикатор направления

Задачи

  • Добавьте индикатор направления на курсор для поиска голограмм.

Instructions

Мы будем использовать файл DirectionIndicator.cs , который:

  1. Отображение индикатора направления, если пользователь не смотрит на голограммы.
  2. Скрытие индикатора направления, если пользователь смотрит на голограммы.
  3. Обновите индикатор направления, чтобы он указывал на голограммы.

Итак, начнем.

  1. Щелкните объект AstroMan на панели Иерархия и щелкните стрелку , чтобы развернуть его.
  2. На панели Иерархия выберите объект DirectionalIndicator в разделе AstroMan.
  3. На панели Inspector (Инспектор ) нажмите кнопку Add Component (Добавить компонент ).
  4. В меню введите в поле поиска Указатель направления. Выберите результат поиска.
  5. На панели Иерархия перетащите объект Cursor в свойство Cursor в инспекторе.
  6. На панели Проект в папке Holograms перетащите ресурс DirectionalIndicator в свойство Индикатор направления в Инспекторе.
  7. Создание и развертывание приложения.
  8. Посмотрите, как объект указателя направления помогает найти астронавта.

Глава 5. Рекламные щиты

Задачи

  • Используйте рекламные щиты, чтобы голограммы всегда были обращены к вам.

Мы будем использовать файл Billboard.cs для поддержания ориентированного на GameObject так, чтобы он всегда сталкивалась с пользователем.

  1. На панели Иерархия выберите объект AstroMan .
  2. На панели Inspector (Инспектор ) нажмите кнопку Add Component (Добавить компонент ).
  3. В меню введите в поле поиска Billboard. Выберите результат поиска.
  4. В инспекторе установите для оси сводных данных значение Y.
  5. Тестирование Создайте и разверните приложение, как раньше.
  6. Посмотрите, как объект Billboard сталкивается с вами независимо от того, как вы изменяете точку зрения.
  7. Сейчас удалите скрипт из AstroMan .

Глава 6. Tag-Along

Задачи

  • Используйте Tag-Along, чтобы наши голограммы следовали за нами по комнате.

При работе с этой проблемой мы будем руководствоваться следующими ограничениями проектирования:

  • Содержимое всегда должно быть далеко.
  • Содержимое не должно путать.
  • Содержимое с блокировкой головы неудобно.

Решение, используемое здесь, заключается в том, чтобы использовать подход с добавлением тегов.

Объект с тегом никогда не покидает представление пользователя полностью. Вы можете представить тег как объект, прикрепленный к голове пользователя резиновыми лентами. По мере перемещения пользователя содержимое будет оставаться в пределах легкого взгляда, скользя к краю представления без полного выхода. Когда пользователь смотрит на объект тега, он получает более полное представление.

Мы будем использовать файл SimpleTagalong.cs , который:

  1. Определите, находится ли объект Tag-Along в пределах камеры.
  2. Если не в пределах представления frustum, поместите Tag-Along частично в пределах представления frustum.
  3. В противном случае поместите Tag-Along на расстояние по умолчанию от пользователя.

Для этого сначала необходимо изменить скрипт Interactible.cs для вызова TagalongAction.

  1. Измените файл Interactible.cs , выполнив упражнение по написанию кода 6.a (раскомментирование строк 84–87).
/* TODO: DEVELOPER CODING EXERCISE 6.a */
// 6.a: Uncomment the lines below to perform a Tagalong action.
if (interactibleAction != null)
{
    interactibleAction.PerformAction();
}

Скрипт InteractibleAction.cs в паре с Interactible.cs выполняет пользовательские действия при касании голограмм. В этом случае мы будем использовать один специально для добавления тегов.

  • В папке Скрипты щелкните ресурс TagalongAction.cs , чтобы открыть его в Visual Studio.
  • Выполните упражнение по написанию кода или измените его следующим образом:
    • В верхней части иерархии в строке поиска введите ChestButton_Center и выберите результат.
    • На панели Inspector (Инспектор ) нажмите кнопку Add Component (Добавить компонент ).
    • В меню введите в поле поиска Действие Tagalong. Выберите результат поиска.
    • В папке Holograms найдите ресурс Tagalong .
    • Выберите объект ChestButton_Center в иерархии. Перетащите объект TagAlong с панели Проект на инспектор в свойство Object To Tagalong .
    • Перетащите объект Tagalong Action из inspector в поле Interactible Action (Интерактивное действие ) скрипта Interactible .
  • Дважды щелкните скрипт TagalongAction, чтобы открыть его в Visual Studio.

Настройка Interactible

Нам нужно добавить следующее:

  • Добавьте функциональные возможности в функцию PerformAction в скрипте TagalongAction (наследуемом от InteractibleAction).
  • Добавьте рекламные щиты к объекту , на который установлен взгляд, и задайте для оси поворота значение XY.
  • Затем добавьте простые Tag-Along в объект .

Вот наше решение из 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);
    }
}
  • Тестирование Создание и развертывание приложения.
  • Следите за тем, как содержимое следует за центром точки взгляда, но не непрерывно и без блокировки.