Tworzenie aplikacji na Androida XR w Unity

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

W tym przewodniku znajdziesz omówienie programowania na platformie Android XR za pomocą Unity. Android XR działa z znanymi narzędziami i funkcjami, których oczekujesz od Unity. Obsługa Androida XR w Unity jest oparta na OpenXR, więc wiele funkcji opisanych w omówieniu OpenXR jest też obsługiwanych w Unity.

Z tego przewodnika dowiesz się:

  • Obsługa Unity na Androidzie XR
    • Podstawy 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 związane ze zgodnością
  • Dane wejściowe i interakcje

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 FoundationOpenXR Plugin, aby pomóc Ci szybko rozpocząć pracę. Podczas tworzenia aplikacji za pomocą Unity na Androida XR zalecamy używanie uniwersalnego potoku renderowania (URP) jako potoku renderowania i Vulkana jako interfejsu Graphics API. Te funkcje umożliwiają korzystanie z niektórych funkcji graficznych Unity, które są obsługiwane tylko w przypadku Vulkan. Więcej informacji o konfigurowaniu tych ustawień znajdziesz w przewodniku po konfiguracji projektu.

Unity XR Basics

Jeśli dopiero zaczynasz przygodę z Unity lub tworzeniem aplikacji XR, zapoznaj się z podręcznikiem Unity XR, aby poznać podstawowe koncepcje i procesy związane z 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 m.in. te tematy: uprawnienia Androida w Unity, ustawienia kompilacji na Androida, kompilowanie aplikacji na Androidaprzesyłanie aplikacji do Google Play.

Pakiety Unity na Androida XR

Istnieją 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 XR Plug-in Management w Unity. Menedżer wtyczek XR dodaje ustawienia projektu, które umożliwiają zarządzanie wtyczkami XR oraz oferują pomoc w ich ładowaniu, inicjowaniu, konfigurowaniu i kompilowaniu. Aby umożliwić aplikacji wykonywanie funkcji OpenXR w czasie działania, w projekcie muszą być włączone te funkcje za pomocą menedżera wtyczek.

Ten obraz pokazuje przykład miejsca, w którym 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ść funkcji 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 mieszanej rzeczywistości. Zapewnia interfejs funkcji AR, ale nie implementuje żadnych funkcji. Implementację zapewnia pakiet Unity OpenXR Android XR. Aby rozpocząć korzystanie z tego pakietu, zapoznaj się z jego 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ć wciągające środowiska. Można go używać samodzielnie lub w połączeniu z pakietem Unity OpenXR Android XR.

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

Funkcje i kwestie związane ze zgodnością

W tej tabeli opisujemy 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 Ci funkcje, oraz sprawdzić, czy są jakieś kwestie związane z kompatybilnością.

Funkcja

Unity OpenXR: ciąg 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 bufora (Vulkan)

Android XR (Extensions): Session Management

  • 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. Poszczególne funkcje będą odpowiednio obsługiwać konflikty.

Śledzenie urządzenia

Nie dotyczy

Nie dotyczy

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

Aparat

Android XR: Aparat AR

Nie dotyczy

Ta funkcja obsługuje szacowanie oświetlenia i przekazywanie obrazu na pełnym ekranie.

Wykrywanie samolotów

Android XR: płaszczyzna AR

Android XR (Extensions): Plane

Te 2 funkcje są identyczne. Używaj jednej z nich. Android XR (Extensions): płaszczyzna jest uwzględniona, aby deweloperzy mogli korzystać z funkcji śledzenia obiektów i trwałych kotwic w Androidzie XR (Extensions) bez konieczności polegania na zależności od pakietu Unity OpenXR Android XR. W przyszłości funkcja Android XR (Extensions): Plane zostanie usunięta na rzecz funkcji Android XR: AR Anchor.

Ś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

  • 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 wyrazów twarzy użytkownika za pomocą funkcji Android XR: śledzenie twarzy. Obie te funkcje można stosować razem.

Rzutowanie promieni

Android XR: AR Raycast

  • Kotwica samolotu
  • Depth Anchor

Nie dotyczy

Ta funkcja umożliwia rzutowanie promienia i obliczanie punktu przecięcia tego promienia z obiektami śledzonymi na płaszczyźnie lub obiektami śledzonymi na podstawie głębi, które są wykrywane w środowisku fizycznym.

Kotwice

Android XR: kotwica AR

Android XR (Extensions): Anchor

  • Ustawienia funkcji obejmują trwałość.

Obie funkcje obsługują kotwice przestrzenne i kotwice płaszczyzny. Możesz używać jednej z nich. W przypadku trwałych kotwic używaj Androida XR (rozszerzenia): Anchor. W przyszłości funkcja Android XR (Extensions): Anchor zostanie usunięta, a wszystkie jej funkcje będą dostępne w Androidzie XR: AR Anchor.

Occlusion

Android XR: zasłanianie w AR

  • Głębokość środowiska

Nie dotyczy

Określanie widoczności pozwala na ukrywanie lub częściowe zasłanianie treści w rzeczywistości mieszanej w aplikacji przez obiekty w środowisku fizycznym.

Wskaźniki dotyczące skuteczności

Dane o wydajności Androida XR

Nie dotyczy

Użyj tej funkcji, aby uzyskać dostęp do danych o wydajności urządzeń z Androidem XR.

Warstwy kompozycji

Obsługa warstwy kompozycji (wymagane są wtyczka OpenXR i warstwa kompozycji XR)

Android XR: warstwa kompozycji passthrough

  • XR_ANDROID_composition_layer_passthrough_mesh

Użyj funkcji Composition Layer Support w Unity, aby tworzyć podstawowe warstwy kompozycji (np. czworokąt, cylinder, projekcja). Android XR: warstwa kompozycji passthrough może być używana do tworzenia warstwy passthrough z niestandardową siatką, odczytywaną z GameObject w Unity.

Renderowanie foveated

Renderowanie z ogniskowaniem (wymagana wtyczka OpenXR)

  • Obsługuje renderowanie foveated śledzące wzrok: obszar o wyższej rozdzielczości jest wyśrodkowany w miejscu, na które patrzy użytkownik, dzięki czemu jest mniej widoczny.

Foveation (starsza wersja)

Renderowanie foveated umożliwia przyspieszenie renderowania poprzez obniżenie rozdzielczości obszarów w peryferyjnym polu widzenia użytkownika. Renderowanie z ogniskowaniem w Unity jest obsługiwane tylko w przypadku aplikacji korzystających z URP i Vulkana. Funkcja Foveation (starsza wersja) w rozszerzeniach Android XR dla Unity obsługuje też wbudowany potok renderowania i OpenGL ES. W miarę możliwości zalecamy korzystanie z funkcji renderowania z ogniskowaniem w Unity. Pamiętaj, że w przypadku tworzenia aplikacji na Androida XR zalecane są zarówno URP, jak i Vulkan.

Nieograniczona przestrzeń referencyjna

Nie dotyczy

Android XR: nieograniczona przestrzeń odniesienia

Ta funkcja ustawia tryb śledzenia XRInputSubsystem na Unbounded. Nieograniczone oznacza, ż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 wirtualne obrazy mieszają się ze światem rzeczywistym, gdy włączony jest tryb widoku otoczenia.

Geoprzestrzenne (VPS)

Nie dotyczy

Android XR: Geospatial

Umożliwia XRGeospatialManager dostęp do funkcji systemu pozycjonowania wizualnego (VPS), sprawdzanie dostępności lokalizacji i obliczanie pozycji geoprzestrzennych.

Google Cloud Auth

Nie dotyczy

Android XR: Google Cloud

Udostępnia strategie konfiguracji uwierzytelniania sesji (klucz interfejsu API, bez klucza i token uwierzytelniania) dla usług działających w chmurze.

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 podłączonych kontrolerów i ścieżek wejściowych za pomocą XRBatteryStateDisplayFeature.

Global Passthrough Dimming

Android XR: Aparat AR

Nie dotyczy

Umożliwia wysyłanie zapytań i ustawianie poziomów przyciemnienia obrazu z kamery w świecie rzeczywistym 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, nieprzezroczystości trybu widoku otoczenia i aktywnych trybów wprowadzania danych) za pomocą funkcji XRRecommendedSettingsFeature.TryGetRecommendedSettings.

Dane wejściowe i interakcje

Android XR obsługuje wielomodowe naturalne wprowadzanie danych.

Oprócz śledzenia dłoni i oczu 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ć interakcję za pomocą dłoni i nie można zakładać, że wszystkie urządzenia będą dostarczane z kontrolerami.

Profile interakcji

Unity używa profilu interakcji do zarządzania sposobem, w jaki aplikacja XR komunikuje się z różnymi urządzeniami i platformami XR. Te profile określają oczekiwane dane wejściowe i wyjściowe dla różnych konfiguracji sprzętowych, zapewniając zgodność i spójne działanie na różnych platformach. Włączając profile interakcji, możesz mieć pewność, że aplikacja XR będzie działać prawidłowo na różnych urządzeniach, zachowa spójne mapowanie danych wejściowych i będzie mieć dostęp do określonych funkcji XR. Aby ustawić profil interakcji:

  1. Otwórz okno Ustawienia projektu (menu: Edytuj > Ustawienia projektu).
  2. Kliknij 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 dłonią

Interakcja z użyciem rąk (XR_EXT_hand_interaction) jest zapewniana przez wtyczkę OpenXR, a układ urządzenia <HandInteraction>możesz udostępnić w systemie wprowadzania danych Unity, włączając profil interakcji z użyciem rąk. Użyj tego profilu interakcji w przypadku sterowania rękami obsługiwanego przez 4 pozycje zdefiniowane przez OpenXR: „szczypanie”, „dotykanie”, „celowanie” i „chwytanie”. Jeśli potrzebujesz dodatkowych funkcji interakcji z dłońmi lub śledzenia rąk, zapoznaj się z sekcją XR Hands na tej stronie.

Interakcja za pomocą wzroku

Interakcja za pomocą wzroku (XR_EXT_eye_gaze_interaction) jest zapewniana przez wtyczkę OpenXR. Możesz użyć tego układu, aby pobrać dane o pozycji oczu (położenie i rotacja) zwracane przez rozszerzenie. Więcej informacji o interakcji za pomocą wzroku znajdziesz w przewodniku OpenXR Input

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 myszy na Androidzie XR (XR_ANDROID_mouse_interaction) jest udostępniany przez rozszerzenia Androida XR dla Unity. Udostępnia on <AndroidXRMouse> układ urządzenia w systemie wejściowym Unity.

Interakcja z gestem dłoni

Wtyczka OpenXR obsługuje interakcję z pozycją dłoni (XR_EXT_palm_pose), która udostępnia układ <PalmPose>systemie wejściowym Unity. Pozycja dłoni nie ma być alternatywą dla rozszerzeń ani pakietów, które śledzą ruch dłoni w bardziej złożonych przypadkach użycia. Zamiast tego można jej używać do umieszczania wizualnych treści specyficznych dla aplikacji, takich jak awatary. 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_trackingXR_FB_hand_tracking_aim – oraz udostępnia otoczkę do konwertowania danych o stawach rąk ze śledzenia rąk na pozy wejściowe. Aby korzystać z funkcji pakietu XR Hands, włącz funkcje Hand Tracking SubsystemMeta Hand Tracking 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 stawów dłoni albo gdy chcesz pracować z gestami niestandardowymi.

Więcej informacji znajdziesz w dokumentacji Unity na temat konfigurowania XR Hands w projekcie.

Regiony ufności śledzenia twarzy

Rozszerzenie XR_ANDROID_face_tracking podaje wartości ufności dla 3 obszarów twarzy: lewego górnego, prawego górnego i dolnej części twarzy. Te wartości, które mieszczą się w zakresie od 0 (brak pewności) do 1 (najwyższa pewność), wskazują dokładność śledzenia twarzy w poszczególnych regionach.

Możesz używać tych wartości ufności, aby stopniowo wyłączać kształty mieszane lub stosować filtry wizualne (np. rozmycie) do odpowiedniego obszaru twarzy. W przypadku podstawowego wyłączania kształtów mieszania 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 ufności i ich używać 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 wizualizator prefabrykowany.

Siatka na rękę

Pakiet Android XR Unity zawiera funkcję Hand Mesh, która zapewnia dostęp do XR_ANDROID_hand_mesh extension. Funkcja Hand Mesh zapewnia siatki dla rąk 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 reprezentującej 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ą rękę do renderowania odpowiedniej reprezentacji rąk użytkownika.

Gesty systemowe

Android XR zawiera gest systemowy, który umożliwia użytkownikom otwieranie menu, aby cofać się, otwierać program uruchamiający lub wyświetlać przegląd 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 nawigacji systemowej. Sprawdzanie AimFlags, SystemGestureDominantHand pozwala dowiedzieć się, kiedy to działanie systemu jest wykonywane. Więcej informacji o AimFlags znajdziesz w dokumentacji Unity dotyczącej wyliczenia MetaAimFlags.

XR Interaction Toolkit

Pakiet XR Interaction Toolkit to zaawansowany system interakcji oparty na komponentach, który umożliwia tworzenie środowisk VR i AR. Zapewnia on platformę, która udostępnia interakcje 3D i interfejsu użytkownika ze zdarzeń wejściowych Unity. Obsługuje zadania związane z interakcją, w tym reakcję haptyczną, reakcję wizualną i lokomocję.


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