Tworzenie aplikacji na Androida XR w Unity

Odpowiednie urządzenia z XR
Te wskazówki pomogą Ci tworzyć treści na te typy urządzeń z XR.
Gogle XR
Przewodowe okulary XR

W tym przewodniku znajdziesz omówienie tworzenia aplikacji na Androida XR za pomocą Unity. Android XR współpracuje ze znanymi narzędziami i funkcjami, których oczekujesz od Unity. Ponieważ obsługa Androida XR w Unity jest oparta na OpenXR, wiele funkcji opisanych w omówieniu OpenXR jest też obsługiwanych w Unity.

Z tego przewodnika dowiesz się:

  • Obsługa Unity na Androidzie XR
    • Podstawowe informacje o Unity XR
    • Tworzenie i publikowanie aplikacji na Androida XR
    • Pakiety Unity na Androida XR
      • Unity OpenXR: pakiet Android XR
      • Rozszerzenia Androida XR dla Unity
      • Funkcje i kwestie dotyczące zgodności
  • Dane wejściowe i interakcja

Obsługa Unity na Androidzie XR

Podczas tworzenia aplikacji Unity na Androida XR możesz korzystać z narzędzi i funkcji rzeczywistości mieszanej w najnowszych wersjach Unity 6. Obejmuje to szablony rzeczywistości mieszanej, które korzystają z XR Interaction Toolkit, AR Foundation i OpenXR Plugin, aby pomóc Ci szybko rozpocząć pracę. Podczas tworzenia aplikacji za pomocą Unity na Androida XR zalecamy używanie Universal Render Pipeline (URP) jako potoku renderowania i Vulkan jako interfejsu Graphics API. Te funkcje umożliwiają korzystanie z niektórych funkcji graficznych Unity, które są obsługiwane tylko przez Vulkan. Więcej informacji o konfigurowaniu tych ustawień znajdziesz w przewodniku po konfiguracji projektu.

Podstawy Unity XR

Jeśli dopiero zaczynasz korzystać z Unity lub XR, zapoznaj się z instrukcją XR w Unity, aby poznać podstawowe pojęcia i procesy XR. Instrukcja XR zawiera informacje o:

Tworzenie i publikowanie aplikacji na Androida

Unity udostępnia szczegółową dokumentację dotyczącą tworzenia, kompilowania i publikowania aplikacji na Androida, która obejmuje takie tematy jak uprawnienia Androida w Unity, ustawienia kompilacji na Androida, tworzenie aplikacji na Androida i publikowanie w Google Play.

Pakiety Unity na Androida XR

Dostępne są 2 pakiety, które umożliwiają tworzenie aplikacji Unity na Androida XR. Oba te pakiety to wtyczki dostawcy XR, które można włączyć za pomocą pakietu zarządzania wtyczkami XR w Unity. Menedżer wtyczek XR dodaje ustawienia projektu, które umożliwiają zarządzanie wtyczkami XR i pomagają w ich wczytywaniu, inicjowaniu, konfigurowaniu i obsłudze kompilacji. Aby aplikacja mogła wykonywać funkcje OpenXR w czasie działania, projekt musi mieć te funkcje włączone w menedżerze wtyczek.

Ten obraz przedstawia przykład, gdzie można włączyć te grupy funkcji w edytorze Unity.

Rysunek 1. Przykład ekranu zarządzania wtyczkami Unity XR.

Unity OpenXR Android XR

Pakiet Unity OpenXR Android XR to wtyczka XR, która dodaje obsługę Androida XR do Unity. Ta wtyczka XR zapewnia większość obsługi Androida XR w Unity i umożliwia obsługę urządzeń z Androidem XR w projektach AR Foundation. AR Foundation jest przeznaczony dla deweloperów, którzy chcą tworzyć projekty AR lub rzeczywistości mieszanej. Zapewnia interfejs dla funkcji AR, ale nie implementuje żadnych funkcji. Pakiet Unity OpenXR Android XR zapewnia implementację. Aby rozpocząć korzystanie z tego pakietu, zapoznaj się z instrukcją, która zawiera przewodnik dla początkujących.

Rozszerzenia Androida XR dla Unity

Rozszerzenia Androida XR dla Unity uzupełniają pakiet Unity OpenXR Android XR i zawierają dodatkowe funkcje, które pomagają tworzyć immersyjne doświadczenia. Można go używać samodzielnie lub razem z pakietem Unity OpenXR Android XR.

Aby rozpocząć korzystanie z tego pakietu, postępuj zgodnie z naszym przewodnikiem po konfiguracji projektu lub krótkim wprowadzeniem do importowania rozszerzeń Androida XR do Unity.

Funkcje i kwestie dotyczące zgodności

W tabeli poniżej opisano funkcje obsługiwane przez pakiety Unity OpenXR: Android XR i Android XR Extensions for Unity. Możesz jej użyć, aby określić, który pakiet zawiera potrzebne funkcje, i sprawdzić kwestie związane ze zgodnością.

Funkcja

Unity OpenXR: ciąg znaków funkcji Androida XR

Ciąg znaków funkcji rozszerzeń Androida XR dla Unity

Przypadki użycia i oczekiwane działanie

Sesja AR

Android XR: sesja AR

  • Ustawienia funkcji obejmują optymalizację odrzucania buforów (Vulkan)

Android XR (rozszerzenia): zarządzanie sesjami

  • Ustawienia funkcji obejmują podpróbkowanie (Vulkan) i URP SpaceWarp (Vulkan)

Aby korzystać z funkcji z dowolnego pakietu, musisz włączyć funkcję sesji AR dla tego pakietu. Możesz włączyć oba zestawy funkcji jednocześnie. Konflikty między poszczególnymi funkcjami będą odpowiednio rozwiązywane.

Śledzenie urządzenia

Nie dotyczy

Nie dotyczy

Śledzenie urządzenia służy do śledzenia jego pozycji i obrotu w przestrzeni fizycznej. GameObject XR Origin automatycznie obsługuje śledzenie urządzeń i przekształcanie elementów śledzonych na układ współrzędnych Unity za pomocą komponentu XROrigin i hierarchii GameObject z kamerą i TrackedPoseDriver.

Aparat

Android XR: aparat AR

Nie dotyczy

Ta funkcja obsługuje szacowanie oświetlenia i tryb passthrough na pełnym ekranie.

Wykrywanie płaszczyzn

Android XR: AR Plane

Nie dotyczy

Ta funkcja umożliwia wykrywanie i śledzenie płaskich powierzchni w środowisku fizycznym.

Śledzenie obiektów

Nie dotyczy

Android XR (rozszerzenia): śledzenie obiektów

Ta funkcja umożliwia wykrywanie i śledzenie obiektów w środowisku fizycznym w połączeniu z biblioteką obiektów referencyjnych.

Śledzenie twarzy

Android XR: AR Face

  • Tylko XR_ANDROID_eye_tracking
  • Brak śledzenia twarzy

Android XR: śledzenie twarzy

  • XR_ANDROID_face_tracking

Obsługa oczu awatara jest zapewniana przez funkcję Android XR: AR Face. Dostęp do mimiki użytkownika za pomocą funkcji Android XR: śledzenie twarzy. Możesz używać obu tych funkcji jednocześnie.

Rzutowanie promieni

Android XR: AR Raycast

  • Kotwica płaszczyzny
  • Kotwica głębokości

Nie dotyczy

Ta funkcja umożliwia rzutowanie promienia i obliczanie przecięcia między tym promieniem a wykrytymi w środowisku fizycznym elementami śledzenia płaszczyzny lub głębi.

Kotwice

Android XR: kotwica AR

Nie dotyczy

Kotwica AR obsługuje kotwice przestrzenne, płaskie i trwałe za pomocą AR Foundation.

Okluzja

Android XR: okluzja AR

  • Głębia otoczenia

Nie dotyczy

Okluzja umożliwia ukrywanie lub częściowe zasłanianie treści rzeczywistości mieszanej w aplikacji przez obiekty w środowisku fizycznym.

Wskaźniki skuteczności

Wskaźniki skuteczności Androida XR

Nie dotyczy

Ta funkcja umożliwia dostęp do danych o wydajności urządzeń z Androidem XR.

Warstwy kompozycji

Obsługa warstwy kompozycji (wymagana jest wtyczka OpenXR i warstwa kompozycji XR)

Android XR: warstwa kompozycji trybu Passthrough

  • XR_ANDROID_composition_layer_passthrough_mesh

Użyj obsługi warstw kompozycji w Unity, aby utworzyć podstawowe warstwy kompozycji (np. czworokąt, cylinder, projekcja). Android XR: warstwy kompozycji trybu passthrough można użyć do utworzenia warstwy trybu passthrough z niestandardową siatką, odczytując dane z GameObject w Unity.

Renderowanie fowacyjne

Renderowanie foveated (wymagana jest wtyczka OpenXR)

  • Obsługuje renderowanie foveated ze śledzeniem wzroku: obszar o wyższej rozdzielczości jest wyśrodkowany w miejscu, w którym użytkownik patrzy, dzięki czemu jest mniej widoczny dla użytkownika.

Fowiacja (starsza wersja)

Renderowanie fowacyjne pozwala przyspieszyć renderowanie przez obniżenie rozdzielczości obszarów w polu widzenia peryferyjnego użytkownika. Funkcja renderowania foveated w Unity jest obsługiwana tylko w aplikacjach korzystających z URP i Vulkan. Funkcja fowiacji (starsza wersja) w rozszerzeniach Androida XR dla Unity obsługuje też wbudowany potok renderowania i OpenGL ES. Zalecamy korzystanie z funkcji renderowania foveated w Unity, gdy jest to możliwe. Pamiętaj, że podczas tworzenia aplikacji na Androida XR zalecamy korzystanie zarówno z URP, jak i Vulkan.

Nieograniczona przestrzeń referencyjna

Nie dotyczy

Android XR: nieograniczona przestrzeń referencyjna

Ta funkcja ustawia tryb punktu początkowego śledzenia XRInputSubsystem na Unbounded. Wartość Unbounded wskazuje, że XRInputSubsystem śledzi wszystkie urządzenia wejściowe w odniesieniu do kotwicy świata, która może się zmieniać.

Tryb mieszania środowiska

Nie dotyczy

Tryb mieszania środowiska

Ta funkcja umożliwia ustawienie trybu mieszania środowiska XR, który określa, jak obrazy wirtualne łączą się ze środowiskiem rzeczywistym, gdy włączony jest tryb widoku otoczenia.

Geospatial (VPS)

Nie dotyczy

Android XR: Geospatial

Umożliwia XRGeospatialManager dostęp do funkcji systemu pozycjonowania wizualnego (VPS), sprawdzanie dostępności lokalizacji, obliczanie pozycji geoprzestrzennych i konfigurowanie śledzenia płaszczyzny dla kotwic powierzchniowych i geoprzestrzennych.

Google Cloud Auth

Nie dotyczy

Android XR: Google Cloud

Zapewnia strategie konfiguracji uwierzytelniania sesji (klucz interfejsu API, bez klucza i token uwierzytelniania) dla usług obsługujących chmurę.

Multimodal Face

Nie dotyczy

Android XR (rozszerzenia): multimodalna twarz

Rozszerza Unity ARFace o konfigurowalne, multimodalne tryby śledzenia twarzy (XRFaceTrackerMode).

Wyświetlanie stanu baterii

Nie dotyczy

Wyświetlanie stanu baterii

Umożliwia sprawdzanie stanu baterii i poziomu naładowania połączonych kontrolerów i ścieżek wejściowych za pomocą interfejsu XRBatteryStateDisplayFeature.

Globalne przyciemnienie trybu passthrough

Android XR: aparat AR

Nie dotyczy

Umożliwia sprawdzanie i ustawianie poziomów przyciemniania obrazu z kamery za pomocą funkcji ARCameraFeature w Unity.

Wyliczanie właściwości systemu

Nie dotyczy

Android XR: właściwości systemu

Wylicza właściwości rozszerzenia środowiska wykonawczego i możliwości urządzenia za pomocą XR_ANDROID_enumerate_system_extension_properties.

Zalecane ustawienia

Nie dotyczy

Android XR: zalecane ustawienia

Umożliwia sprawdzanie stanów środowiska wykonawczego przed uruchomieniem (w tym trybu mieszania środowiska, przezroczystości i aktywnych trybów wprowadzania danych) za pomocą XRRecommendedSettingsFeature.TryGetRecommendedSettings.

Wykrywanie ramki ograniczającej

Android XR: ramka ograniczająca AR

Elementy przestrzenne (rozszerzenia): ramka ograniczająca

Zapewnia obsługę wykrywania ramek ograniczających w przypadku obiektów 3D w środowisku fizycznym przy użyciu platformy OpenXR Spatial Entities (SpatialBoundingBoxSubsystem).

Kotwice, które można udostępniać

Nie dotyczy

Elementy przestrzenne (rozszerzenia): kotwice do udostępniania

Rozszerza możliwości kotwic za pomocą ARShareableAnchorManager i XRShareableAnchorSubsystem, w tym dołączania kotwic geoprzestrzennych (TryAttachGeospatialAnchor) i kotwic powierzchniowych (TryAttachSurfaceAnchorAsync) w przypadku używania z Androidem XR: geoprzestrzennym.

Kontener przestrzenny

Nie dotyczy

Kontener przestrzenny

Umożliwia renderowanie treści aplikacji w zarządzanym przez system kontenerze wolumetrycznym 3D w trybie pełnej przestrzeni, z interfejsami API i zdarzeniami wywołania zwrotnego w XRSpatialContainerFeature do wysyłania zapytań i żądań dotyczących stanu, granic i widoczności kontenera.

Dane wejściowe i interakcja

Android XR obsługuje multimodalne, naturalne wprowadzanie danych.

Oprócz śledzenia dłoni i wzroku obsługiwane są też urządzenia peryferyjne, takie jak kontrolery 6DoF, mysz i klawiatura fizyczna. Oznacza to, że aplikacje na Androida XR powinny obsługiwać interakcje dłonią i nie można zakładać, że wszystkie urządzenia będą wyposażone w kontrolery.

Profile interakcji

Unity używa profilu interakcji do zarządzania sposobem, w jaki aplikacja XR komunikuje się z różnymi urządzeniami z XR i platformami XR. Te profile określają oczekiwane dane wejściowe i wyjściowe dla różnych konfiguracji sprzętowych, co zapewnia zgodność i spójne działanie na różnych platformach. Włączenie profili interakcji pomaga zapewnić prawidłowe działanie aplikacji XR na różnych urządzeniach, zachowanie spójnego mapowania danych wejściowych i dostęp do określonych funkcji XR. Aby ustawić profil interakcji:

  1. Otwórz okno Ustawienia projektu (menu: Edytuj > Ustawienia projektu).
  2. Kliknij XR Plug-in Management (Zarządzanie wtyczkami XR), aby rozwinąć sekcję wtyczek (w razie potrzeby).
  3. Na liście wtyczek XR wybierz OpenXR.
  4. W sekcji Profile interakcji kliknij przycisk +, aby dodać profil.
  5. Wybierz z listy profil, który chcesz dodać.

Interakcja za pomocą dłoni

Interakcja za pomocą dłoni (XR_EXT_hand_interaction) jest obsługiwana przez wtyczkę OpenXR. Układ urządzenia <HandInteraction> możesz udostępnić w systemie wprowadzania Unity, włączając profil interakcji za pomocą dłoni. Używaj tego profilu interakcji do wprowadzania danych dłonią obsługiwanego przez 4 pozy działania zdefiniowane przez OpenXR: „uszczypnięcie”, „pchnięcie”, „celowanie” i „chwyt”. Jeśli potrzebujesz dodatkowych funkcji interakcji lub śledzenia rąk, zapoznaj się z informacjami o XR Hands na tej stronie.

Interakcja za pomocą wzroku

Interakcja za pomocą wzroku (XR_EXT_eye_gaze_interaction) jest obsługiwana przez wtyczkę OpenXR. Możesz użyć tego układu, aby pobrać dane o położeniu oczu (pozycja i obrót), które zwraca rozszerzenie. Więcej informacji o interakcji za pomocą wzroku znajdziesz w przewodniku po danych wejściowych OpenXR.

Interakcja z kontrolerem

Android XR obsługuje profil kontrolera Oculus Touch w przypadku kontrolerów 6DoF. Oba te profile są udostępniane przez wtyczkę OpenXR.

Interakcja z myszą

Profil interakcji z myszą na Androidzie XR (XR_ANDROID_mouse_interaction) jest udostępniany przez rozszerzenia Androida XR dla Unity. Udostępnia on układ urządzenia <AndroidXRMouse> w systemie Unity Input System.

Interakcja z gestem dłoni

Wtyczka OpenXR obsługuje interakcję Palm Pose (XR_EXT_palm_pose), która udostępnia układ <PalmPose> w systemie wprowadzania danych Unity. Pozycja dłoni nie ma być alternatywą dla rozszerzeń lub pakietów, które śledzą dłonie w bardziej złożonych przypadkach użycia. Zamiast tego można jej używać do umieszczania treści wizualnych związanych z aplikacją, takich jak grafiki awatarów. Pozycja dłoni obejmuje zarówno jej położenie, jak i orientację.

XR Hands

Pakiet XR Hands umożliwia dostęp do danych śledzenia rąk za pomocą XR_EXT_hand_tracking i XR_FB_hand_tracking_aim oraz udostępnia kod do konwertowania danych o stawach dłoni ze śledzenia rąk na pozycje wejściowe. Aby korzystać z funkcji dostępnych w pakiecie XR Hands, włącz funkcje śledzenie rąk Subsystem i Meta śledzenie rąk Aim OpenXR.

Przykład pokazujący, jak włączyć śledzenie rąk Pakiet XR Hands może być przydatny, jeśli potrzebujesz bardziej szczegółowych danych o pozycji dłoni lub stawach dłoni albo gdy chcesz pracować z niestandardowymi gestami.

Więcej informacji znajdziesz w dokumentacji Unity dotyczącej konfigurowania XR Hands w projekcie.

Regiony ufności śledzenia twarzy

Rozszerzenie XR_ANDROID_face_tracking podaje poziomy ufności dla 3 obszarów twarzy: lewego górnego, prawego górnego i dolnego. Te wartości, od 0 (brak pewności) do 1 (najwyższa pewność), wskazują dokładność śledzenia twarzy w każdym regionie.

Możesz użyć tych poziomów ufności, aby stopniowo wyłączać kształty mieszane lub stosować filtry wizualne (np. rozmycie) do odpowiedniego obszaru twarzy. W przypadku podstawowego wyłącz kształty mieszane w odpowiednim obszarze twarzy.

Obszar „dolnej części twarzy” obejmuje wszystko poniżej oczu, w tym usta, podbródek, policzki i nos. Dwa górne obszary obejmują oczy i brwi po lewej i prawej stronie twarzy.

Poniższy fragment kodu w języku C# pokazuje, jak uzyskać dostęp do danych o pewności i używać ich w skrypcie 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;
        }
    }
}

Więcej informacji znajdziesz w dokumentacji rozszerzeń Androida XR dla Unity.

Wybierz sposób renderowania dłoni

Android XR obsługuje 2 sposoby renderowania dłoni: siatkę dłoni i prefabrykowany wizualizator.

Siatka dłoni

Pakiet Unity Androida XR zawiera funkcję Hand Mesh, która zapewnia dostęp do XR_ANDROID_hand_mesh extension. Funkcja siatki dłoni udostępnia siatki dłoni użytkownika. Siatka dłoni zawiera wierzchołki trójkątów, które reprezentują geometrię dłoni. Ta funkcja ma służyć do tworzenia spersonalizowanej siatki, która odzwierciedla rzeczywistą geometrię dłoni użytkownika na potrzeby wizualizacji.

Prefabrykat XR Hands

Pakiet XR Hands zawiera przykład o nazwie Hands visualizer, który zawiera w pełni przygotowane lewą i prawą dłoń do renderowania odpowiedniej do kontekstu reprezentacji dłoni użytkownika.

Gesty systemowe

Android XR zawiera gest systemowy, który otwiera menu umożliwiające użytkownikom cofanie się, otwieranie menu z aplikacjami lub wyświetlanie przeglądu uruchomionych aplikacji. Użytkownik może aktywować to menu systemowe, wykonując gest uszczypnięcia dominującą ręką.

Gdy użytkownik korzysta z menu nawigacji systemowej, aplikacja reaguje tylko na zdarzenia śledzenia ruchów głowy. Pakiet XR Hands może wykrywać, kiedy użytkownik wykonuje określone działania, takie jak interakcja z tym menu nawigacyjnym systemu. Zaznaczenie opcji AimFlags, SystemGesture i DominantHand pozwala dowiedzieć się, kiedy to działanie systemowe jest wykonywane. Więcej informacji o AimFlags znajdziesz w dokumentacji Unity dotyczącej Enum MetaAimFlags.

XR Interaction Toolkit

Pakiet XR Interaction Toolkit to wysokopoziomowy, oparty na komponentach system interakcji do tworzenia treści VR i AR. Zapewnia platformę, która udostępnia interakcje 3D i interfejsu ze zdarzeń wejściowych Unity. Obsługuje zadania interakcji, w tym reakcje haptyczne, reakcje wizualne i przemieszczanie się.


OpenXR™ i logo OpenXR są znakami towarowymi należącymi do firmy The Khronos Group Inc. i są zarejestrowane jako znaki towarowe w Chinach, Japonii, Unii Europejskiej i Wielkiej Brytanii.