В этом руководстве рассказывается, как разрабатывать приложения для Android XR с помощью Unity. Android XR работает со знакомыми инструментами и функциями Unity. Поскольку поддержка Android XR в Unity основана на OpenXR, многие функции, описанные в обзоре OpenXR, также поддерживаются в Unity.
В этом руководстве вы узнаете:
- Поддержка Unity для Android XR
- Основы Unity XR
- Разработка и публикация приложений для Android XR
- Пакеты Unity для Android XR
- Пакет Android XR для Unity OpenXR
- Расширения Android XR для Unity
- Функции и совместимость
- Ввод и взаимодействие
Поддержка Unity для Android XR
При создании приложений Unity для Android XR вы можете использовать инструменты и возможности смешанной реальности в последних версиях Unity 6. В том числе шаблоны смешанной реальности, в которых используются XR Interaction Toolkit, AR Foundation и OpenXR Plugin. При создании приложений с помощью Unity для Android XR мы рекомендуем использовать Universal Render Pipeline (URP) в качестве конвейера рендеринга и Vulkan в качестве графического API. Это позволит вам использовать некоторые графические функции Unity, которые поддерживаются только в Vulkan. Подробные инструкции по настройке приведены в руководстве по настройке проекта.
Основы Unity XR
Если вы только начинаете работать с Unity или XR, ознакомьтесь с руководством по XR в Unity, чтобы понять основные концепции и рабочие процессы XR. В руководстве по XR содержится информация о следующем:
- Плагины поставщиков XR, включая Unity OpenXR: Android XR и Android XR Extensions для Unity.
- Пакеты поддержки XR для добавления дополнительных функций на уровне приложения.
- Руководство по архитектуре XR, в котором описывается набор технологий Unity XR и подсистемы XR.
- Настройка проекта XR
- Как создавать и запускать XR-приложения
- Рекомендации по графике XR, в том числе по универсальному конвейеру рендеринга, стереоскопической визуализации, фовеальной визуализации, областям многоканальной визуализации и времени формирования кадра VR.
- Руководство по работе со звуком в XR, в том числе по поддержке пространственного звука.
Разработка и публикация приложений для Android
В Unity есть подробная документация по разработке, сборке и публикации приложений для Android. В ней рассматриваются такие темы, как разрешения Android в Unity, настройки сборки Android, сборка приложения для Android и публикация в Google Play.
Пакеты Unity для Android XR
Для создания приложений Unity для Android XR есть два пакета. Оба пакета являются плагинами поставщика XR, которые можно включить с помощью пакета XR Plug-in Management в Unity. Менеджер плагинов XR добавляет настройки проекта, которые помогают управлять плагинами XR, а также загружать, инициализировать и настраивать их. Чтобы ваше приложение могло выполнять функции OpenXR во время работы, эти функции должны быть включены в проекте через менеджер плагинов.
На изображении показано, где можно включить эти группы функций в редакторе Unity.
Unity OpenXR Android XR
Пакет Unity OpenXR Android XR – это плагин XR, который добавляет поддержку Android XR в Unity. Этот плагин обеспечивает большую часть поддержки Android XR для Unity и позволяет использовать устройства Android XR в проектах AR Foundation. AR Foundation предназначен для разработчиков, которые хотят создавать AR или смешанную реальность. Он предоставляет интерфейс для функций дополненной реальности, но не реализует их. Пакет Unity OpenXR Android XR предоставляет реализацию. Чтобы начать работу с этим пакетом, ознакомьтесь с руководством по началу работы.
Расширения Android XR для Unity
Расширения Android XR для Unity дополняют пакет Unity OpenXR Android XR и включают дополнительные функции, которые помогут вам создавать иммерсивные возможности. Его можно использовать отдельно или вместе с пакетом Unity OpenXR Android XR.
Чтобы начать работу с этим пакетом, следуйте нашему руководству по настройке проекта или краткому руководству по импорту Android XR Extensions для Unity.
Функции и совместимость
В таблице ниже описаны функции, поддерживаемые пакетами Unity OpenXR: Android XR и Android XR Extensions for Unity. С ее помощью вы можете определить, какой пакет содержит нужные вам функции, и учесть совместимость.
Функция |
Unity OpenXR: строка функции Android XR |
Строка функции Android XR Extensions для Unity |
Варианты использования и ожидаемое поведение |
|---|---|---|---|
Android XR: сеанс дополненной реальности
|
Android XR (расширения): управление сеансами
|
Чтобы использовать функции из любого пакета, необходимо включить функцию AR Session для этого пакета. Вы можете включить оба набора функций одновременно. Конфликты между отдельными функциями будут разрешаться соответствующим образом. |
|
Н/Д |
Н/Д |
Отслеживание устройства используется для определения его положения и поворота в физическом пространстве. GameObject XR Origin автоматически обрабатывает отслеживание устройств и преобразует отслеживаемые объекты в систему координат Unity, используя свой компонент XROrigin и иерархию GameObject с камерой и TrackedPoseDriver. |
|
Android XR: AR-камера |
Н/Д |
Эта функция поддерживает оценку освещенности и сквозной полноэкранный режим. |
|
Android XR: плоскость дополненной реальности |
Н/Д |
Эта функция позволяет обнаруживать и отслеживать плоские поверхности в физической среде. |
|
Н/Д |
Android XR (расширения): отслеживание объектов |
Эта функция позволяет обнаруживать и отслеживать объекты в физической среде, используя библиотеку эталонных объектов. |
|
Android XR: AR Face
|
Android XR: отслеживание лица
|
Поддержка глаз аватара обеспечивается функцией Android XR: AR Face. Получать доступ к мимике пользователя с помощью функции Android XR: отслеживание лица. Эти две функции можно использовать вместе. |
|
Android XR: AR Raycast
|
Н/Д |
Эта функция позволяет отслеживать луч и рассчитывать пересечение между этим лучом и отслеживаемыми плоскостями или глубиной, обнаруженными в физической среде. |
|
Android XR: AR Anchor |
Н/Д |
AR Anchor поддерживает пространственные, плоские и постоянные якоря через AR Foundation. |
|
Android XR: AR Occlusion
|
Н/Д |
Окклюзия позволяет скрывать или частично закрывать контент смешанной реальности в приложении за объектами в физической среде. |
|
Показатели эффективности |
Показатели производительности Android XR |
Н/Д |
Эта функция позволяет просматривать показатели производительности устройств Android XR. |
Поддержка слоев композиции (требуются плагин OpenXR и слой композиции XR) |
Android XR: слой композиции сквозной камеры
|
Используйте поддержку слоев композиции в Unity, чтобы создавать базовые слои композиции (например, четырехугольник, цилиндр, проекцию). Android XR: Passthrough Composition Layer можно использовать для создания сквозного слоя с настраиваемой сеткой, считываемой из GameObject Unity. |
|
Фовеальный рендеринг (требуется плагин OpenXR)
|
Фовеация (устаревшая версия) |
Следящий рендеринг позволяет ускорить рендеринг за счет снижения разрешения областей в периферийном зрении пользователя. Функция фовеального рендеринга в Unity поддерживается только в приложениях, использующих URP и Vulkan. Функция фовеации (устаревшая) в расширениях Android XR для Unity также поддерживает встроенный конвейер рендеринга и OpenGL ES. Рекомендуем по возможности использовать функцию фовеального рендеринга в Unity. Обратите внимание, что при создании приложений для Android XR рекомендуется использовать URP и Vulkan. |
|
Н/Д |
Эта функция устанавливает для режима отслеживания XRInputSubsystem значение Unbounded. Unbounded указывает, что XRInputSubsystem отслеживает все InputDevices по отношению к привязке к миру, которая может меняться. |
||
Н/Д |
Режим смешивания с окружением |
Эта функция позволяет задать режим смешивания XR-среды, который определяет, как виртуальные изображения смешиваются с реальным миром, когда включена сквозная передача. |
|
Н/Д |
Позволяет |
||
Н/Д |
Предоставляет стратегии настройки аутентификации сеансов (ключ API, без ключа и токен аутентификации) для облачных сервисов. |
||
Н/Д |
Расширяет Unity ARFace за счет настраиваемых мультимодальных режимов отслеживания лица ( |
||
Н/Д |
Позволяет запрашивать состояние батареи и уровень заряда подключенных контроллеров и путей ввода с помощью |
||
Android XR: AR-камера |
Н/Д |
Позволяет запрашивать и устанавливать уровни затемнения сквозного режима с помощью ARCameraFeature в Unity. |
|
Н/Д |
Перечисляет свойства расширения среды выполнения и возможности устройства с помощью |
||
Н/Д |
Позволяет запрашивать состояния среды выполнения перед запуском (включая режим смешивания среды, прозрачность сквозной передачи и активные модальности ввода) с помощью |
||
Android XR: ограничивающая рамка дополненной реальности |
Обеспечивает поддержку обнаружения граничных рамок для 3D-объектов в физической среде с помощью фреймворка OpenXR Spatial Entities ( |
||
Н/Д |
Расширяет возможности якорей с помощью |
||
Н/Д |
Позволяет отрисовывать контент приложения в управляемом системой 3D-контейнере в режиме полного пространства. При этом используются API и события обратного вызова в |
Ввод и взаимодействие
Android XR поддерживает мультимодальный естественный ввод.
Помимо отслеживания взгляда и движений рук, поддерживаются периферийные устройства, такие как контроллеры 6DoF, мышь и физическая клавиатура. Это означает, что приложения для Android XR должны поддерживать взаимодействие с помощью рук, и нельзя предполагать, что все устройства будут поставляться с контроллерами.
Профили взаимодействия
Unity использует профиль взаимодействия, чтобы управлять тем, как ваше XR-приложение взаимодействует с различными XR-устройствами и платформами. Эти профили определяют ожидаемые входные и выходные данные для различных конфигураций оборудования, обеспечивая совместимость и стабильную функциональность на разных платформах. Включив профили взаимодействия, вы можете обеспечить правильную работу приложения XR на разных устройствах, поддерживать согласованное сопоставление входных данных и получить доступ к определенным функциям XR. Чтобы настроить профиль взаимодействия:
- Откройте окно Project Settings (Настройки проекта) (меню: Edit > Project Settings (Изменить > Настройки проекта)).
- Нажмите XR Plug-in Management (Управление плагинами XR), чтобы развернуть раздел плагинов (если необходимо).
- В списке плагинов XR выберите OpenXR.
- В разделе Профили взаимодействия нажмите кнопку +, чтобы добавить профиль.
- Выберите профиль из списка.
Взаимодействие с помощью рук
Взаимодействие с помощью рук (XR_EXT_hand_interaction) обеспечивается плагином OpenXR. Вы можете добавить макет устройства <HandInteraction> в систему ввода Unity, включив профиль взаимодействия с помощью рук. Используйте этот профиль взаимодействия для ввода с помощью рук, поддерживающего четыре позы действия, определенные OpenXR: "сведение пальцев", "тычок", "прицеливание" и "захват". Если вам нужны дополнительные функции взаимодействия с руками или отслеживания рук, ознакомьтесь с разделом XR Hands на этой странице.
Взаимодействие с помощью отслеживания глаз
Взаимодействие с помощью взгляда (XR_EXT_eye_gaze_interaction) обеспечивается плагином OpenXR. Вы можете использовать этот макет, чтобы получать данные о положении глаз (позиция и поворот), которые возвращает расширение. Подробнее о взаимодействии с помощью взгляда…
Взаимодействие с контроллером
Android XR поддерживает профиль контроллера Oculus Touch для контроллеров 6DoF. Оба профиля предоставляются плагином OpenXR.
Взаимодействие с мышью
Профиль взаимодействия с мышью Android XR (XR_ANDROID_mouse_interaction) предоставляется расширениями Android XR для Unity. Она предоставляет макет устройства <AndroidXRMouse> в Unity Input System.
Взаимодействие с помощью жеста ладонью
Плагин OpenXR поддерживает взаимодействие с позой ладони (XR_EXT_palm_pose), которое предоставляет макет <PalmPose> в системе ввода Unity.
Поза ладони не предназначена для замены расширений или пакетов, которые выполняют отслеживание рук в более сложных случаях. Вместо этого ее можно использовать для размещения визуального контента, относящегося к приложению, например визуальных элементов аватара. Поза ладони состоит из положения и ориентации ладони.
XR Hands
Пакет XR Hands позволяет получать доступ к данным отслеживания рук с помощью XR_EXT_hand_tracking и XR_FB_hand_tracking_aim, а также предоставляет оболочку для преобразования данных о суставах рук из отслеживания рук в позы ввода. Чтобы использовать функции, предоставляемые пакетом XR Hands, включите функции Hand Tracking Subsystem и Meta Hand Tracking Aim OpenXR.
Пакет XR Hands может быть полезен, если вам нужны более подробные данные о позе руки или суставах или если вы хотите работать с собственными жестами.
Подробную информацию можно найти в документации Unity по настройке XR Hands в проекте.
Области достоверности отслеживания лиц
Расширение XR_ANDROID_face_tracking предоставляет значения достоверности для трех областей лица: верхней левой, верхней правой и нижней. Эти значения, от 0 (нет уверенности) до 1 (наивысшая уверенность), указывают на точность отслеживания лица для каждого региона.
Вы можете использовать эти уровни достоверности, чтобы постепенно отключать формы смешивания или применять визуальные фильтры (например, размытие) к соответствующей области лица. Для базового уровня отключите формы смешивания в соответствующей области лица.
Нижняя часть лица – это все, что находится под глазами, включая рот, подбородок, щеки и нос. Две верхние области включают глаза и брови с левой и правой стороны лица.
В следующем фрагменте кода C# показано, как получить доступ к данным об уровне достоверности и использовать их в скрипте Unity:
using UnityEngine;
using Google.XR.Extensions;
public class FaceTrackingConfidence : MonoBehaviour
{
void Update()
{
if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.HasValue)
{
DebugTextTopCenter.text = "XrInstance hasn't been initialized.";
return;
}
else if (!XRFaceTrackingFeature.IsFaceTrackingExtensionEnabled.Value)
{
DebugTextTopCenter.text = "XR_ANDROID_face_tracking is not enabled.";
return;
}
for (int x = 0; x < _faceManager.Face.ConfidenceRegions.Length; x++)
{
switch (x)
{
case (int)XRFaceConfidenceRegion.Lower:
regionText = "Bottom";
break;
case (int)XRFaceConfidenceRegion.LeftUpper:
regionText = DebugTextConfidenceLeft;
break;
case (int)XRFaceConfidenceRegion.RightUpper:
regionText = DebugTextConfidenceRight;
break;
}
}
}
Подробную информацию вы найдете в документации по расширениям Android XR для Unity.
Выберите способ отрисовки рук
Android XR поддерживает два способа рендеринга рук: сетку рук и визуализатор префабов.
Сетка руки
В пакете Android XR Unity есть функция Hand Mesh, которая предоставляет доступ к XR_ANDROID_hand_mesh extension. Функция Hand Mesh предоставляет сетки для рук пользователя. Сетка руки содержит вершины треугольников, которые представляют геометрию руки. Эта функция предназначена для создания персонализированной сетки, представляющей реальную геометрию рук пользователя для визуализации.
Префаб XR Hands
В пакете XR Hands есть пример Hands visualizer, который содержит полностью оснащенные левую и правую руки для рендеринга соответствующего контексту представления рук пользователя.
Системные жесты
В Android XR есть системный жест, который открывает меню, позволяющее пользователям вернуться назад, открыть панель запуска или посмотреть список запущенных приложений. Пользователь может активировать это системное меню, используя щипок доминирующей рукой.
Когда пользователь взаимодействует с системным меню навигации, приложение будет реагировать только на события отслеживания движения головы. Пакет XR Hands может определять, когда пользователь выполняет определенные действия, например взаимодействует с этим системным меню навигации. Проверка AimFlags, SystemGesture и DominantHand позволяет узнать, когда выполняется это системное действие. Дополнительную информацию о AimFlags можно найти в документации Unity по Enum MetaAimFlags.
XR Interaction Toolkit
XR Interaction Toolkit – это высокоуровневая система взаимодействия на основе компонентов, предназначенная для создания контента виртуальной и дополненной реальности. Он предоставляет фреймворк, который позволяет использовать взаимодействия с 3D-объектами и интерфейсом из событий ввода Unity. Она поддерживает задачи взаимодействия, включая виброотклик, визуальный отклик и перемещение.
OpenXR™ и логотип OpenXR являются товарными знаками, принадлежащими The Khronos Group Inc. и зарегистрированными в Великобритании, Европейском союзе, Китае и Японии.