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

Важно!

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

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

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

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

Важно!

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

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

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

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

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

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

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

Примечание

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

Эррата и примечания

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

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

Задачи

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

Instructions

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

При развертывании в 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 в поле курсораSimpleSinglePointerSelector InputManager в нижней части инспектора.

Simple Single Pointer Selector set-up

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

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

Instructions

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

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

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

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

Задачи

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

Instructions

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

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

Задачи

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

Instructions

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

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

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

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

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

Задачи

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

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

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

Глава 6. Tag-Along

Задачи

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

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

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

Решение, используемое здесь, заключается в использовании подхода "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 , выполняет пользовательские действия при касании голограмм. В этом случае мы будем использовать его специально для тегов.

  • В папке Scripts щелкните ресурс TagalongAction.cs, чтобы открыть его в Visual Studio.
  • Выполните упражнение по написанию кода или измените его на следующее:
    • В верхней части иерархии в строке поиска ChestButton_Center и выберите результат.
    • На панели инспектора нажмите кнопку "Добавить компонент ".
    • В меню введите в поле поиска Tagalong Action. Выберите результат поиска.
    • В Голограммы папке найдите ресурс Tagalong.
    • Выберите объект ChestButton_Center в иерархии. Перетащите объект TagAlong из панели Project в инспектор в свойство Object To Tagalong.
    • Перетащите объект Tagalong Action из инспектора в поле "Взаимодействуемое действие " в скрипте Interactible .
  • Дважды щелкните скрипт TagalongAction, чтобы открыть его в Visual Studio.

Interactible set-up

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

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