Функции, поддерживаемые Опенкср Mixed Reality в UnityMixed Reality OpenXR supported features in Unity

Пакет подключаемого модуля опенкср для смешанной реальности является расширением подключаемого модуля опенкср Unity и поддерживает набор функций для головных телефонов HoloLens 2 и Windows Mixed Reality.The Mixed Reality OpenXR Plugin package is an extension of Unity's OpenXR Plugin and supports a suite of features for HoloLens 2 and Windows Mixed Reality headsets. Прежде чем продолжить, убедитесь, что установлено приложение unity 2020,2 или более поздней версии, Опенкср подключаемый модуль, версия 0.1.2 или более поздней, а проект Unity настроен для опенкср.Before continuing, make sure that you've installed Unity 2020.2 or later, OpenXR Plugin version 0.1.2 or later, and your Unity project is configured for OpenXR.

Поддерживаемые функцииWhat's supported

В настоящее время поддерживаются следующие функции:The following features are currently supported:

Holographic удаленное взаимодействие в режиме воспроизведения редактора UnityHolographic Remoting in Unity Editor play mode

Создание проекта Unity для UWP в проекте Visual Studio, а затем упаковка и развертывание на устройстве HoloLens 2 может занять некоторое время.Building a UWP Unity project in Visual Studio project and then packaging and deploying it to a HoloLens 2 device can take some time. Одно из решений — включить удаленное взаимодействие с помощью редактора, которое позволяет выполнять отладку сценария C#, используя режим "Воспроизведение" непосредственно на устройстве HoloLens 2 по сети.One solution is to enable the Holographic Editor Remoting, which lets you debug your C# script using “Play” mode directly to a HoloLens 2 device over your network. Этот сценарий позволяет избежать издержек при создании и развертывании пакета UWP на удаленном устройстве.This scenario avoids the overhead of building and deploying a UWP package to remote device.

  1. Сначала необходимо установить приложение с удаленным проигрывателем holographic из магазина в HoloLens 2.First, you need to install the Holographic Remoting Player app from Store on your HoloLens 2

  2. Запустите приложение удаленного проигрывателя holographic в HoloLens 2, и вы увидите номер версии и IP-адрес для подключения.Run the Holographic Remoting Player app on HoloLens 2 and you'll see the version number and IP address to connect to

    • Для работы с подключаемым модулем Опенкср потребуется v версии 2.4 или более поздней.You'll need v2.4 or later to work with the OpenXR plugin

    Снимок экрана удаленного проигрывателя holographic, работающего в HoloLens

  3. Откройте Параметры проекта Edit->, перейдите в раздел Управление подключаемыми модулями XR и установите флажок набор функций Windows Mixed Reality :Open Edit -> Project Settings, navigate to XR plug-in Management, and check the Windows Mixed Reality feature set box:

    Снимок экрана: панель "Параметры проекта", открытая в редакторе Unity с выделенным подключаемым модулем управления XR

  4. Разверните раздел " компоненты " в разделе опенкср и выберите команду " отобразить все ".Expand the Features section under OpenXR and select Show All

  5. Установите флажок удаленное взаимодействие с помощью редактора holographic и введите IP-адрес, полученный из приложения holographic Remoting:Check the Holographic Editor Remoting checkbox and input the IP address you get from the Holographic Remoting app:

    Снимок экрана: панель "Параметры проекта", открытая в редакторе Unity с выделенными компонентами

Теперь можно нажать кнопку "Воспроизвести", чтобы воспроизвести приложение Unity в удаленном приложении holographic на HoloLens.Now you can click the “Play” button to play your Unity app into the Holographic Remoting app on your HoloLens. Вы также можете присоединить Visual Studio к Unity для отладки скриптов C# в режиме воспроизведения.You can also attach Visual Studio to Unity to debug C# scripts in the play mode.

Примечание

Начиная с версии 0.1.0, среда выполнения holographic Remoting не поддерживает привязки, а функции Аранчорманажер не будут работать через удаленное взаимодействие.As of version 0.1.0, the Holographic Remoting runtime doesn’t support Anchors, and ARAnchorManager functionalities will not work through remoting. Эта функция появилась в будущих выпусках.This feature is coming in future releases.

Привязки и сохранение привязкиAnchors and Anchor Persistence

Подключаемый модуль Mixed Reality Опенкср предоставляет базовые функции привязки с помощью реализации Арфаундатион Аранчорманажер Unity.The Mixed Reality OpenXR Plugin supplies basic anchor functionality through an implementation of Unity’s ARFoundation ARAnchorManager. Основные сведения о аранчор s в арфаундатион см. в руководстве по Арфаундатион для AR Anchor Manager.To learn the basics on ARAnchor s in ARFoundation, visit the ARFoundation Manual for AR Anchor Manager. Начиная с версии 0.1.0 этот подключаемый модуль поддерживает все функциональные возможности Аранчорманажер, за исключением создания привязок, присоединенных к плоскости, которая ожидается в будущем выпуске.As of version 0.1.0, this plugin supports all ARAnchorManager functionality except creating anchors attached to a plane, which is coming in a future release.

Сохранение привязки и КсранчорстореAnchor Persistence and the XRAnchorStore

Дополнительный API, называемый ксранчорсторе , позволяет сохранять привязки между сеансами.An additional API called the XRAnchorStore enables anchors to be persisted between sessions. Ксранчорсторе — это представление сохраненных привязок на устройстве.The XRAnchorStore is a representation of the saved anchors on your device. Привязки можно сохранять из аранчорс в сцене Unity, загружать из хранилища в новый аранчорс или удалять из хранилища.Anchors can be persisted from ARAnchors in the Unity scene, loaded from storage into new ARAnchors, or deleted from storage.

Примечание

Эти привязки должны быть сохранены и загружены на одном устройстве.These anchors are to be saved and loaded on the same device. Хранилище с привязкой между устройствами будет поддерживаться с помощью пространственных привязок Azure в следующем выпуске.Cross-device anchor storage will be supported through Azure Spatial Anchors in a future release.

public class Microsoft.MixedReality.ARSubsystems.XRAnchorStore
{
    // A list of all persisted anchors, which can be loaded.
    public IReadOnlyList<string> PersistedAnchorNames { get; }

    // Clear all persisted anchors
    public void Clear();

    // Load a single persisted anchor by name. The ARAnchorManager will create this new anchor and report it in
    // the ARAnchorManager.anchorsChanged event. The TrackableId returned here is the same TrackableId the
    // ARAnchor will have when it is instantiated.
    public TrackableId LoadAnchor(string name);

    // Attempts to persist an existing ARAnchor with the given TrackableId to the local store. Returns true if
    // the storage is successful, false otherwise.
    public bool TryPersistAnchor(string name, TrackableId trackableId);

    // Removes a single persisted anchor from the anchor store. This will not affect any ARAnchors in the Unity
    // scene, only the anchors in storage.
    public void UnpersistAnchor(string name);
}

Чтобы загрузить Ксранчорсторе, подключаемый модуль предоставляет метод расширения для Ксранчорсубсистем, подсистему Аранчорманажер:To load the XRAnchorStore, the plugin provides an extension method on the XRAnchorSubsystem, the subsystem of an ARAnchorManager:

public static Task<XRAnchorStore> LoadAnchorStoreAsync(this XRAnchorSubsystem anchorSubsystem)

Чтобы использовать этот метод расширения, необходимо получить доступ к нему из подсистемы Аранчорманажер следующим образом:To use this extension method, access it from an ARAnchorManager's subsystem as follows:

ARAnchorManager arAnchorManager = GetComponent<ARAnchorManager>();
XRAnchorStore anchorStore = await arAnchorManager.subsystem.LoadAnchorStoreAsync();

Полный пример сохранения и несохраненных привязок см. в разделе привязки-> примеры привязок в образце сцены подключаемого модуля Mixed Reality опенкср:To see a full example of persisting / unpersisting anchors, check out the Anchors -> Anchors Sample GameObject and AnchorsSample.cs script in the Mixed Reality OpenXR Plugin Sample Scene:

Снимок экрана: панель иерархии открыта в редакторе Unity с выделенным образцом "привязки"

Снимок экрана: Панель инспектора открыта в редакторе Unity с выделенным образцом сценария "привязки"

Взаимодействие контроллера движения и рукиMotion controller and hand interactions

Основные сведения о взаимодействии смешанной реальности в Unity см. в руководстве по Unity для XR данных Unity.To learn the basics about mixed reality interactions in Unity, visit the Unity Manual for Unity XR Input. Эта документация по Unity охватывает сопоставления от входных данных, относящихся к конкретному контроллеру, с более обобщенными инпутфеатуреусажеами, как можно идентифицировать и классифицировать доступные входные данные XR, как считывать их из этих входных данных и многое другое.This Unity documentation covers the mappings from controller-specific inputs to more generalizable InputFeatureUsage s, how available XR inputs can be identified and categorized, how to read data from these inputs, and more.

Подключаемый модуль Mixed Reality Опенкср предоставляет дополнительные профили взаимодействия ввода, сопоставленные со стандартным инпутфеатуреусаже, как описано ниже.The Mixed Reality OpenXR Plugin provides additional input interaction profiles, mapped to standard InputFeatureUsage s as detailed below:

инпутфеатуреусажеInputFeatureUsage HP reverbы G2 Controller (Опенкср)HP Reverb G2 Controller (OpenXR) HoloLens (Опенкср)HoloLens Hand (OpenXR)
primary2DAxisprimary2DAxis ДжойстикJoystick
primary2DAxisClickprimary2DAxisClick Джойстик — щелчокJoystick - Click
триггерtrigger ТриггерTrigger
регулировкиgrip РегулировкиGrip Воздушный нажим или сжатиеAir tap or squeeze
примарибуттонprimaryButton [X/A] — нажмите клавишу[X/A] - Press Жест касанияAir tap
секондарибуттонsecondaryButton [Y/B] — нажмите клавишу[Y/B] - Press
грипбуттонgripButton Захват и нажатие клавишиGrip - Press
тригжербуттонtriggerButton Триггер-нажатиеTrigger - Press
менубуттонmenuButton МенюMenu

AIM и захватAim and Grip Poses

У вас есть доступ к двум наборам экземпляров через входные взаимодействия Опенкср:You have access to two sets of poses through OpenXR input interactions:

  • Захват для отрисовки объектов в рукиThe grip poses for rendering objects in the hand
  • Цель, указывающая на мир.The aim poses for pointing into the world.

Дополнительные сведения об этой структуре и различиях между ними можно найти в подкаталогах Опенкср Specification-input.More information on this design and the differences between the two poses can be found in the OpenXR Specification - Input Subpaths.

Представления, предоставляемые Инпутфеатуреусажес девицепоситион, девицеротатион, девицевелоЦити и девицеангуларвелоЦити , представляют собой OpenXR захват .Poses supplied by the InputFeatureUsages DevicePosition, DeviceRotation, DeviceVelocity, and DeviceAngularVelocity all represent the OpenXR grip pose. Инпутфеатуреусажес, связанные с захватом, определяются в КоммонусажесUnity.InputFeatureUsages related to grip poses are defined in Unity’s CommonUsages.

Представления, предоставляемые Инпутфеатуреусажес поинтерпоситион, поинтерротатион, поинтервелоЦити и поинтерангуларвелоЦити , представляют собой OpenXR Цель .Poses supplied by the InputFeatureUsages PointerPosition, PointerRotation, PointerVelocity, and PointerAngularVelocity all represent the OpenXR aim pose. Эти Инпутфеатуреусажес не определены во вложенных файлах C#, поэтому необходимо определить собственный Инпутфеатуреусажес следующим образом:These InputFeatureUsages aren't defined in any included C# files, so you'll need to define your own InputFeatureUsages as follows:

public static readonly InputFeatureUsage<Vector3> PointerPosition = new InputFeatureUsage<Vector3>("PointerPosition");

хаптиксHaptics

Сведения об использовании хаптикс в системе ввода XR в Unity можно найти в руководстве по Unity для Unity XR input-хаптикс.For information on using haptics in Unity’s XR Input system, documentation can be found at the Unity Manual for Unity XR Input - Haptics.

Что ожидается в ближайшее времяWhat's coming soon

Следующие проблемы и отсутствующие функции известны с помощью Опенкср подключаемого модуля Mixed Reality версии 0.1.0.The following issues and missing features are known with Mixed Reality OpenXR plugin version 0.1.0. Мы работаем над этим и выпустили исправления и новые функции в будущих выпусках.We're working on these and will release fixes and new features in upcoming releases.

  • Арпланесубсистем еще не поддерживается.ARPlaneSubsystem is not supported yet. Арпланеманажер, АРРАЙКАСТМАНАЖЕР и связанный API, такие как аранчорманажер. аттачанчор , также не поддерживаются в HoloLens 2.ARPlaneManager, ARRaycastManager, and related API like ARAnchorManager.AttachAnchor are also not supported on HoloLens 2.
  • Привязка еще не поддерживается с помощью удаленного взаимодействия holographic, но в ближайшем будущем.Anchor isn't supported by Holographic Remoting yet, but it's coming in the near future.
  • Отслеживание сетки вручную , QR-коды и ксрмешсубсистем пока не поддерживаются.Hand Mesh tracking, QR Codes, and XRMeshSubsystem aren't supported yet.
  • Поддержка пространственных привязок Azure появилась в следующем выпуске.Azure Spatial Anchors support is coming in a future release.
  • ARM64 — единственная поддерживаемая платформа для приложений HoloLens 2.ARM64 is the only supported platform for HoloLens 2 apps. Платформа ARM поступает в будущем выпуске.The ARM platform is coming in a future release.

Устранение неполадокTroubleshooting

При приостановке и возобновлении работы приложения Unity в HoloLens 2 приложение не может корректно возобновить работу, что приводит к 4 вращающимся точкам в представлении HoloLens.When you suspend and resume a Unity app on HoloLens 2, the app can't correctly resume, which leads to 4 spinning dots in the HoloLens view.

  • Установка для режима отправки глубины значения " нет " в параметрах проекта опенкср в качестве обходного путиSet Depth submission Mode to None in the OpenXR project settings as a workaround