Разработка для Android XR с помощью Unity

Поддерживаемые XR-устройства
Это руководство поможет вам создавать продукты для таких XR-устройств.
XR-шлемы
Проводные XR-очки

В этом руководстве рассказывается, как разрабатывать приложения для 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 содержится информация о следующем:

Разработка и публикация приложений для 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.

Рисунок 1. Пример экрана Unity XR Plug-in Management.

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: сеанс дополненной реальности

  • Настройки функции включают оптимизацию отбрасывания буфера (Vulkan)

Android XR (расширения): управление сеансами

  • Настройки функции включают субдискретизацию (Vulkan) и URP SpaceWarp (Vulkan).

Чтобы использовать функции из любого пакета, необходимо включить функцию AR Session для этого пакета. Вы можете включить оба набора функций одновременно. Конфликты между отдельными функциями будут разрешаться соответствующим образом.

Отслеживание устройств

Н/Д

Н/Д

Отслеживание устройства используется для определения его положения и поворота в физическом пространстве. GameObject XR Origin автоматически обрабатывает отслеживание устройств и преобразует отслеживаемые объекты в систему координат Unity, используя свой компонент XROrigin и иерархию GameObject с камерой и TrackedPoseDriver.

Камера

Android XR: AR-камера

Н/Д

Эта функция поддерживает оценку освещенности и сквозной полноэкранный режим.

Обнаружение плоскостей

Android XR: плоскость дополненной реальности

Н/Д

Эта функция позволяет обнаруживать и отслеживать плоские поверхности в физической среде.

Отслеживание объектов

Н/Д

Android XR (расширения): отслеживание объектов

Эта функция позволяет обнаруживать и отслеживать объекты в физической среде, используя библиотеку эталонных объектов.

Отслеживание лиц

Android XR: AR Face

  • Только XR_ANDROID_eye_tracking
  • Отслеживание лица недоступно.

Android XR: отслеживание лица

  • XR_ANDROID_face_tracking

Поддержка глаз аватара обеспечивается функцией 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: слой композиции сквозной камеры

  • XR_ANDROID_composition_layer_passthrough_mesh

Используйте поддержку слоев композиции в Unity, чтобы создавать базовые слои композиции (например, четырехугольник, цилиндр, проекцию). Android XR: Passthrough Composition Layer можно использовать для создания сквозного слоя с настраиваемой сеткой, считываемой из GameObject Unity.

Фовеальный рендеринг

Фовеальный рендеринг (требуется плагин OpenXR)

  • Поддерживает фовеальный рендеринг с отслеживанием взгляда: область с более высоким разрешением находится там, куда смотрит пользователь, поэтому он не замечает разницы.

Фовеация (устаревшая версия)

Следящий рендеринг позволяет ускорить рендеринг за счет снижения разрешения областей в периферийном зрении пользователя. Функция фовеального рендеринга в Unity поддерживается только в приложениях, использующих URP и Vulkan. Функция фовеации (устаревшая) в расширениях Android XR для Unity также поддерживает встроенный конвейер рендеринга и OpenGL ES. Рекомендуем по возможности использовать функцию фовеального рендеринга в Unity. Обратите внимание, что при создании приложений для Android XR рекомендуется использовать URP и Vulkan.

Unbounded Reference Space

Н/Д

Android XR: Unbounded Reference Space

Эта функция устанавливает для режима отслеживания XRInputSubsystem значение Unbounded. Unbounded указывает, что XRInputSubsystem отслеживает все InputDevices по отношению к привязке к миру, которая может меняться.

Режим смешивания с окружением

Н/Д

Режим смешивания с окружением

Эта функция позволяет задать режим смешивания XR-среды, который определяет, как виртуальные изображения смешиваются с реальным миром, когда включена сквозная передача.

Geospatial (VPS)

Н/Д

Android XR: Geospatial

Позволяет XRGeospatialManager использовать возможности системы визуального позиционирования (VPS), проверять доступность местоположения, рассчитывать геопространственные позы и настраивать отслеживание плоскости для поверхностных и геопространственных привязок.

Google Cloud Auth

Н/Д

Android XR: Google Cloud

Предоставляет стратегии настройки аутентификации сеансов (ключ API, без ключа и токен аутентификации) для облачных сервисов.

Мультимодальный циферблат

Н/Д

Android XR (расширения): мультимодальное отслеживание лица

Расширяет Unity ARFace за счет настраиваемых мультимодальных режимов отслеживания лица (XRFaceTrackerMode).

Отображение состояния батареи

Н/Д

Отображение состояния батареи

Позволяет запрашивать состояние батареи и уровень заряда подключенных контроллеров и путей ввода с помощью XRBatteryStateDisplayFeature.

Глобальное затемнение сквозной камеры

Android XR: AR-камера

Н/Д

Позволяет запрашивать и устанавливать уровни затемнения сквозного режима с помощью ARCameraFeature в Unity.

Перечисление свойств системы

Н/Д

Android XR: системные свойства

Перечисляет свойства расширения среды выполнения и возможности устройства с помощью XR_ANDROID_enumerate_system_extension_properties.

Рекомендуемые настройки

Н/Д

Android XR: рекомендуемые настройки

Позволяет запрашивать состояния среды выполнения перед запуском (включая режим смешивания среды, прозрачность сквозной передачи и активные модальности ввода) с помощью XRRecommendedSettingsFeature.TryGetRecommendedSettings.

Обнаружение граничной рамки

Android XR: ограничивающая рамка дополненной реальности

Пространственные объекты (расширения): граничная рамка

Обеспечивает поддержку обнаружения граничных рамок для 3D-объектов в физической среде с помощью фреймворка OpenXR Spatial Entities (SpatialBoundingBoxSubsystem).

Общие якоря

Н/Д

Пространственные объекты (расширения): общие привязки

Расширяет возможности якорей с помощью ARShareableAnchorManager и XRShareableAnchorSubsystem, включая прикрепление геопространственных якорей (TryAttachGeospatialAnchor) и якорей поверхности (TryAttachSurfaceAnchorAsync) при использовании с Android XR: Geospatial.

Пространственный контейнер

Н/Д

Пространственный контейнер

Позволяет отрисовывать контент приложения в управляемом системой 3D-контейнере в режиме полного пространства. При этом используются API и события обратного вызова в XRSpatialContainerFeature, чтобы запрашивать состояние, границы и видимость контейнера.

Ввод и взаимодействие

Android XR поддерживает мультимодальный естественный ввод.

Помимо отслеживания взгляда и движений рук, поддерживаются периферийные устройства, такие как контроллеры 6DoF, мышь и физическая клавиатура. Это означает, что приложения для Android XR должны поддерживать взаимодействие с помощью рук, и нельзя предполагать, что все устройства будут поставляться с контроллерами.

Профили взаимодействия

Unity использует профиль взаимодействия, чтобы управлять тем, как ваше XR-приложение взаимодействует с различными XR-устройствами и платформами. Эти профили определяют ожидаемые входные и выходные данные для различных конфигураций оборудования, обеспечивая совместимость и стабильную функциональность на разных платформах. Включив профили взаимодействия, вы можете обеспечить правильную работу приложения XR на разных устройствах, поддерживать согласованное сопоставление входных данных и получить доступ к определенным функциям XR. Чтобы настроить профиль взаимодействия:

  1. Откройте окно Project Settings (Настройки проекта) (меню: Edit > Project Settings (Изменить > Настройки проекта)).
  2. Нажмите XR Plug-in Management (Управление плагинами XR), чтобы развернуть раздел плагинов (если необходимо).
  3. В списке плагинов XR выберите OpenXR.
  4. В разделе Профили взаимодействия нажмите кнопку +, чтобы добавить профиль.
  5. Выберите профиль из списка.

Взаимодействие с помощью рук

Взаимодействие с помощью рук (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. и зарегистрированными в Великобритании, Европейском союзе, Китае и Японии.