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. Ввод в смешанной реальности: Взгляд | ✔️ | ✔️ |
Прежде чем начать
Предварительные условия
- Компьютер Windows 10, настроенный с установленными соответствующими инструментами.
- Некоторые базовые возможности программирования на C#.
- Вы должны были завершить mr basics 101.
- Устройство HoloLens , настроенное для разработки.
Файлы проекта
- Скачайте файлы , необходимые для проекта. Требуется Unity 2017.2 или более поздней версии.
- Разархивируйте файлы на рабочем столе или в другом удобном расположении.
Примечание
Если вы хотите просмотреть исходный код перед скачиванием, он доступен на GitHub.
Errata и заметки
- В Visual Studio для попадания в точки останова в коде необходимо отключить (снять флажок) "Только мой код" в разделе Сервис-Параметры-Отладка>>.
Глава 1. Настройка Unity
Задачи
- Оптимизация Unity для разработки решений для HoloLens.
- Импорт ресурсов и настройка сцены.
- Просмотр астронавта в HoloLens.
Instructions
- Запустите Unity.
- Выберите Создать проект.
- Назовите проект ModelExplorer.
- Введите расположение в качестве папки Gaze , которая была ранее не архивирована.
- Задайте для проекта значение 3D.
- Нажмите кнопку Создать проект.
Параметры Unity для HoloLens
Нам нужно сообщить Unity, что приложение, которое мы пытаемся экспортировать, должно создать иммерсивное представление вместо двухмерного. Для этого мы добавляем HoloLens в качестве устройства виртуальной реальности.
- Перейдите в раздел Изменение > параметров > проекта Проигрыватель.
- На панели инспектора для параметров проигрывателя щелкните значок Магазина Windows .
- Разверните группу XR Settings (Параметры XR).
- В разделе Отрисовка установите флажок Virtual Reality Supported (Поддержка виртуальной реальности), чтобы добавить новый список Virtual Reality SDKs (SDK виртуальной реальности).
- Убедитесь, что Windows Mixed Reality отображается в списке. В противном случае нажмите кнопку + в нижней части списка и выберите Windows Holographic.
Далее необходимо задать для серверной части скриптов .NET.
- Перейдите в раздел Изменение > проигрывателя параметров > проекта (возможно, вы все еще используете этот параметр на предыдущем шаге).
- На панели инспектора для параметров проигрывателя щелкните значок Магазина Windows .
- В разделе Конфигурация других параметров убедитесь, что для параметра Серверная часть сценариев задано значение .NET.
Наконец, мы обновим параметры качества, чтобы добиться высокой производительности в HoloLens.
- Перейдите в раздел Изменение > качества > параметров проекта.
- Щелкните стрелку вниз в строке По умолчанию под значком Магазина Windows.
- Выберите Очень низкий для приложений Магазина Windows.
Импорт ресурсов проекта
- Щелкните правой кнопкой мыши папку Assets на панели Проект .
- Щелкните Import Package Custom Package (Импорт пользовательского пакета пакета>).
- Перейдите к скачанным файлам проекта и щелкните ModelExplorer.unitypackage.
- Нажмите кнопку Открыть.
- После загрузки пакета нажмите кнопку Импорт .
Настройка сцены
- В иерархии удалите основную камеру.
- В папке HoloToolkit откройте папку Входные данные , а затем откройте папку Prefabs .
- Перетащите заготовку MixedRealityCameraParent из папки Prefabs в иерархию.
- Щелкните правой кнопкой мыши направленный свет в иерархии и выберите Удалить.
- В папке Holograms перетащите следующие ресурсы в корень иерархии:
- AstroMan
- Освещение
- SpaceAudioSource
- SpaceBackground
- Запустите режим ▶ воспроизведения, чтобы просмотреть астронавта.
- Нажмите кнопку Режим ▶ воспроизведения еще раз, чтобы остановить.
- В папке Holograms найдите ресурс Fitbox и перетащите его в корень иерархии.
- Выберите Fitbox на панели Иерархия .
- Перетащите коллекцию AstroMan из Hierarchy в свойство Коллекция голограмм в поле Fitbox на панели Инспектор .
Сохранение проекта
- Сохранить новую сцену: Файл > Сохранить сцену как.
- Щелкните Создать папку и назовите папку Scenes.
- Присвойте файлу имя ModelExplorer и сохраните его в папке Scenes .
Построение проекта
- В Unity выберите Параметры сборки файлов>.
- Щелкните Добавить открытые сцены , чтобы добавить сцену.
- Выберите универсальная платформа Windows в списке Платформа и щелкните Переключить платформу.
- Если вы разрабатываете специально для HoloLens, задайте для параметра Целевое устройство значение HoloLens. В противном случае оставьте его в поле Любое устройство.
- Убедитесь, что для параметра Тип сборки задано значение D3D , а для пакета SDK — значение Последняя установленная версия (это должен быть пакет SDK 16299 или более поздней версии).
- Щелкните Построить.
- Создайте новую папку с именем App.
- Щелкните папку App одним щелчком.
- Нажмите кнопку Выбрать папку.
По завершении работы Unity появится окно проводник.
- Откройте папку Приложение .
- Откройте решение ModelExplorer Для Visual Studio.
При развертывании в HoloLens:
- С помощью верхней панели инструментов в Visual Studio измените целевой объект с Отладка на Выпуск и с ARM на x86.
- Щелкните стрелку раскрывающегося списка рядом с кнопкой Локальный компьютер и выберите Удаленный компьютер.
- Введите IP-адрес устройства HoloLens и задайте для параметра Режим проверки подлинности значение Универсальный (незашифрованный протокол). Нажмите кнопку Выбрать. Если вы не знаете IP-адрес устройства, просмотрите раздел Параметры > Сеть & Дополнительные параметры браузера>.
- В верхней строке меню выберите Отладка —> запуск без отладки или нажмите клавиши CTRL+F5. Если развертывание выполняется на устройстве впервые, необходимо связать его с Visual Studio.
- После развертывания приложения закройте Fitbox жестом выбора.
При развертывании в иммерсивной гарнитуре:
- С помощью верхней панели инструментов в Visual Studio измените целевой объект с Отладка на Выпуск и с ARM на x64.
- Убедитесь, что для целевого объекта развертывания задано значение Локальный компьютер.
- В верхней строке меню выберите Отладка —> запуск без отладки или нажмите клавиши CTRL+F5.
- После развертывания приложения закройте Fitbox , натянув триггер на контроллере движения.
Глава 2. Обратная связь по курсорам и целевым объектам
Задачи
- Визуальное проектирование и поведение курсора.
- Обратная связь курсора на основе взгляда.
- Обратная связь голограммы на основе взгляда.
Мы будем основывать нашу работу на некоторых принципах проектирования курсоров, а именно:
- Курсор всегда присутствует.
- Не позволяйте курсору быть слишком маленьким или большим.
- Избегайте препятствий для содержимого.
Instructions
- В папке HoloToolkit\Input\Prefabs найдите ресурс InputManager .
- Перетащите InputManager в иерархию.
- В папке HoloToolkit\Input\Prefabs найдите ресурс Cursor .
- Перетащите курсор на иерархию.
- Выберите объект InputManager в иерархии.
- Перетащите объект Cursor из hierarchy в поле Cursor Объекта InputManager SimpleSinglePointerSelector в нижней части инспектора.
Построение и Развертывание
- Перестройте приложение в разделе Параметры сборки файла>.
- Откройте папку Приложение.
- Откройте решение ModelExplorer Для Visual Studio.
- Щелкните Отладка —> запуск без отладки или нажмите клавиши CTRL+F5.
- Понаблюдайте за тем, как курсор рисуется и как он изменяет внешний вид при касании голограммы.
Instructions
- На панели Иерархия разверните объект AstroMan-GEO_G-Back_Center>.>
- Дважды щелкните файл Interactible.cs , чтобы открыть его в Visual Studio.
- Раскомментируйте строки в обратных вызовах 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 по доступу к материалам с помощью скрипта. В этом случае мы уже включили три варианта выделенного материала, необходимого в папку Ресурсы (найдите три материала с выделением в имени).
Построение и Развертывание
- Как и ранее, выполните сборку проекта и разверните его в HoloLens.
- Понаблюдайте за тем, что происходит, когда взгляд направлен на объект, а когда его нет.
Глава 3. Методы нацеливания
Задачи
- Упрощение нацеливания на голограммы.
- Стабилизировать естественные движения головы.
Instructions
- На панели Иерархия выберите объект InputManager .
- На панели Инспектор найдите скрипт Стабилизатор взгляда . Щелкните его, чтобы открыть в Visual Studio, если вы хотите посмотреть.
- Этот скрипт выполняет итерацию по образцам данных Raycast и помогает стабилизировать взгляд пользователя для точного нацеливания.
- В инспекторе можно изменить значение Хранимые примеры стабильности . Это значение представляет количество выборок, по которым стабилизатор выполняет итерацию для вычисления стабилизированного значения.
Глава 4. Индикатор направления
Задачи
- Добавьте индикатор направления на курсор для поиска голограмм.
Instructions
Мы будем использовать файл DirectionIndicator.cs , который:
- Отображение индикатора направления, если пользователь не смотрит на голограммы.
- Скрытие индикатора направления, если пользователь смотрит на голограммы.
- Обновите индикатор направления, чтобы он указывал на голограммы.
Итак, начнем.
- Щелкните объект AstroMan на панели Иерархия и щелкните стрелку , чтобы развернуть его.
- На панели Иерархия выберите объект DirectionalIndicator в разделе AstroMan.
- На панели Inspector (Инспектор ) нажмите кнопку Add Component (Добавить компонент ).
- В меню введите в поле поиска Указатель направления. Выберите результат поиска.
- На панели Иерархия перетащите объект Cursor в свойство Cursor в инспекторе.
- На панели Проект в папке Holograms перетащите ресурс DirectionalIndicator в свойство Индикатор направления в Инспекторе.
- Создание и развертывание приложения.
- Посмотрите, как объект указателя направления помогает найти астронавта.
Глава 5. Рекламные щиты
Задачи
- Используйте рекламные щиты, чтобы голограммы всегда были обращены к вам.
Мы будем использовать файл Billboard.cs для поддержания ориентированного на GameObject так, чтобы он всегда сталкивалась с пользователем.
- На панели Иерархия выберите объект AstroMan .
- На панели Inspector (Инспектор ) нажмите кнопку Add Component (Добавить компонент ).
- В меню введите в поле поиска Billboard. Выберите результат поиска.
- В инспекторе установите для оси сводных данных значение Y.
- Тестирование Создайте и разверните приложение, как раньше.
- Посмотрите, как объект Billboard сталкивается с вами независимо от того, как вы изменяете точку зрения.
- Сейчас удалите скрипт из AstroMan .
Глава 6. Tag-Along
Задачи
- Используйте Tag-Along, чтобы наши голограммы следовали за нами по комнате.
При работе с этой проблемой мы будем руководствоваться следующими ограничениями проектирования:
- Содержимое всегда должно быть далеко.
- Содержимое не должно путать.
- Содержимое с блокировкой головы неудобно.
Решение, используемое здесь, заключается в том, чтобы использовать подход с добавлением тегов.
Объект с тегом никогда не покидает представление пользователя полностью. Вы можете представить тег как объект, прикрепленный к голове пользователя резиновыми лентами. По мере перемещения пользователя содержимое будет оставаться в пределах легкого взгляда, скользя к краю представления без полного выхода. Когда пользователь смотрит на объект тега, он получает более полное представление.
Мы будем использовать файл SimpleTagalong.cs , который:
- Определите, находится ли объект Tag-Along в пределах камеры.
- Если не в пределах представления frustum, поместите Tag-Along частично в пределах представления frustum.
- В противном случае поместите Tag-Along на расстояние по умолчанию от пользователя.
Для этого сначала необходимо изменить скрипт Interactible.cs для вызова TagalongAction.
- Измените файл 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.
Нам нужно добавить следующее:
- Добавьте функциональные возможности в функцию 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);
}
}
- Тестирование Создание и развертывание приложения.
- Следите за тем, как содержимое следует за центром точки взгляда, но не непрерывно и без блокировки.