Tworzenie aplikacji na Androida XR w Unity

Ten przewodnik zawiera omówienie tworzenia aplikacji na platformę Android XR za pomocą Unity. Android XR współpracuje z dostępnymi w Unity narzędziami i funkcjami, a ponieważ obsługa Androida XR w Unity opiera się na OpenXR, wiele funkcji opisanych w ogólnym omówieniu OpenXR jest też obsługiwanych w Unity.

Z tego przewodnika dowiesz się więcej o:

  • Obsługa Unity na Androida XR
    • Podstawy XR w Unity
    • 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 zgodności
  • Wprowadzanie danych i interakcje

Obsługa Androida XR w Unity

Podczas tworzenia aplikacji Unity na Androida XR możesz korzystać z narzędzi i funkcji rzeczywistości mieszanej w Unity 6. Obejmuje to szablony rzeczywistości mieszanej, które korzystają z XR Interaction Toolkit, AR Foundationwtyczki OpenXR, aby ułatwić Ci szybkie rozpoczęcie pracy. Podczas tworzenia aplikacji w Unity na Androida XR zalecamy użycie Universal Render Pipeline (URP) jako potoku renderowania i Vulkan jako interfejsu API grafiki. Te funkcje umożliwiają korzystanie z niektórych nowych funkcji graficznych Unity, które są obsługiwane tylko w Vulkan. Więcej informacji o konfigurowaniu tych ustawień znajdziesz w przewodniku po konfigurowaniu projektu.

Podstawy XR w Unity

Jeśli dopiero zaczynasz korzystać z Unity lub tworzyć aplikacje XR, możesz zapoznać się z podręcznikiem Unity na temat XR, aby poznać podstawowe pojęcia i procesy związane z XR. Podręcznik XR zawiera informacje o tych kwestiach:

Tworzenie i publikowanie aplikacji na Androida

Unity udostępnia szczegółową dokumentację dotyczącą tworzenia, kompilowania i publikowania aplikacji na Androida. Obejmuje ona takie tematy jak uprawnienia Androida w Unity, ustawienia kompilacji Androida, kompilowanie aplikacji na Androidapublikowanie w Google Play.

Pakiety Unity na Androida XR

Istnieją 2 pakiety, które obsługują kompilowanie aplikacji na Unity na Androida XR. Oba te pakiety to wtyczki dostawców rzeczywistości rozszerzonej, które można włączyć za pomocą pakietu do zarządzania wtyczkami rzeczywistości rozszerzonej w Unity. Menedżer wtyczek XR dodaje ustawienia projektu, które umożliwiają zarządzanie wczytywaniem, inicjowaniem, ustawieniami i kompilowaniem wtyczek XR. Aby umożliwić aplikacji wykonywanie funkcji OpenXR w czasie działania, musisz włączyć te funkcje w projekcie za pomocą menedżera wtyczek.

Ilustracja pokazująca, gdzie w edytorze Unity można włączyć te grupy funkcji.

Przykład ekranu zarządzania wtyczką Unity XR

Unity OpenXR na Androida XR

Pakiet OpenXR na Androida XR w Unity to wtyczka XR, która umożliwia dodanie obsługi Androida XR do Unity. Ten wtyczek 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 rzeczywistości rozszerzonej lub mieszanej. Zapewnia interfejs dla funkcji AR, ale nie wdraża żadnych funkcji. Pakiet OpenXR na Androida XR w Unity zapewnia implementację. Aby rozpocząć korzystanie z tego pakietu, zapoznaj się z jego instrukcją, która zawiera przewodnik.

Rozszerzenia Androida XR dla Unity

Rozszerzenia Androida XR dla Unity uzupełniają pakiet Unity OpenXR Android XR i zawierają dodatkowe funkcje, które ułatwiają tworzenie wciągających doświadczeń. Można go używać samodzielnie lub razem z pakietem Unity OpenXR Android XR.

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

Funkcje i kwestie zgodności

W tabeli poniżej opisano funkcje obsługiwane przez pakiet Unity OpenXR: Android XR oraz pakiet Android XR Extensions for Unity. Możesz z niej skorzystać, aby określić, który pakiet zawiera funkcje, których potrzebujesz, oraz sprawdzić kwestie zgodności.

Funkcja

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

Ciąg znaków funkcji Android XR Extensions for Unity

Przypadki użycia i oczekiwane działanie

Sesja AR

Android XR: sesja AR

  • Ustawienia funkcji obejmują optymalizację odrzucania bufora (Vulkan)

Android XR (rozszerzenia): zarządzanie sesją

  • Ustawienia funkcji obejmują subsampling (Vulkan) i URP SpaceWarp (Vulkan).

Aby korzystać z funkcji z każdego pakietu, musisz włączyć funkcję sesji AR dla tego pakietu. Możesz włączyć obie grupy funkcji jednocześnie. Poszczególne funkcje będą odpowiednio rozwiązywać konflikty.

Śledzenie urządzeń

nie dotyczy

nie dotyczy

Śledzenie urządzenia służy do śledzenia jego położenia i obrotu w przestrzeni fizycznej. Obiekt GameObject XR Origin automatycznie obsługuje śledzenie urządzenia i przekształca obiekty śledzenia w systemie współrzędnych Unity za pomocą komponentu XROrigin i hierarchii GameObject z użyciem kamery i sterownika TrackedPoseDriver.

Aparat

Android XR: Aparat AR

nie dotyczy

Ta funkcja obsługuje szacowanie oświetlenia i przepuszczanie pełnego ekranu.

Wykrywanie samolotów

Android XR: AR Plane

Android XR (rozszerzenia): Plane

Te 2 funkcje są identyczne. Użyj jednej z nich. Android XR (Extensions): Plane jest dołączony, aby deweloperzy mogli korzystać z Android XR (Extensions): funkcji śledzenia obiektów i trwałych kotwic bez konieczności korzystania z pakietu Unity OpenXR Android XR. W przyszłości usługa Android XR (Extensions): Plane zostanie usunięta na rzecz usługi 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_avatar_eyes only
  • Brak śledzenia twarzy

Android XR: śledzenie twarzy

  • XR_ANDROID_face_tracking

Obsługa oczu awatara jest dostępna dzięki funkcji Android XR: AR Face. Dostęp do wyrazów twarzy użytkownika za pomocą funkcji śledzenia twarzy w Androidzie XR. W razie potrzeby możesz używać obu tych funkcji jednocześnie.

Promienie

Android XR: rzutowanie w AR

  • Plane Anchor
  • Kotwica głębokości

nie dotyczy

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

Kotwice

Android XR: kotwica AR

Android XR (rozszerzenia): Anchor

  • Ustawienia funkcji obejmują trwałość.

Obie funkcje obsługują stałe punkty orientacyjne w przestrzeni i stałe punkty orientacyjne w samolocie. Możesz użyć jednej z tych funkcji. Aby utworzyć stałe kotwy, użyj Androida XR (Extensions): Anchor. W przyszłości funkcja Anchor zostanie usunięta z Androida XR (rozszerzenia), a wszystkie funkcje Anchor zostaną przeniesione do Androida XR: AR Anchor.

Zasłonięcie

Android XR: zasłona AR

  • Głębokość środowiska

nie dotyczy

Zasłonięcie umożliwia ukrycie lub częściowe zasłonięcie treści w zwiększonej rzeczywistości w aplikacji za obiektami w środowisku fizycznym.

Dane dotyczące skuteczności

Dane o wydajnoś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 kompozytowej (wymagane są wtyczka OpenXR i warstwa kompozytowa XR)

Android XR: warstwa kompozytowa z przekazywaniem

  • XR_ANDROID_composition_layer_passthrough_mesh

Użyj obsługi warstw kompozycji w Unity, aby utworzyć podstawowe warstwy kompozycji (np. kwadrat, cylinder, projekcja). Android XR: za pomocą warstwy przepuszczania kompozycji można utworzyć warstwę przepuszczania z niestandardową siatką, odczytywaną z GameObject w Unity.

Renderowanie foveate

Foveated Rendering (wymagana wtyczka OpenXR)

  • Obsługuje renderowanie foveate z wykorzystaniem śledzenia wzroku: obszar o wyższej rozdzielczości jest wyśrodkowany w miejscu, na które użytkownik patrzy, co powoduje, że jest on mniej widoczny dla użytkownika.

Foveation (starsza wersja)

Rendering foveatowy pozwala przyspieszyć renderowanie przez obniżenie rozdzielczości obszarów w peryferyjnym polu widzenia użytkownika. Funkcja foveated rendering w Unity jest obsługiwana tylko w przypadku aplikacji korzystających z URP i Vulkana. Funkcja Foveation (Legacy) w Android XR Extensions for Unity obsługuje też wbudowany pipeline renderowania i OpenGL ES. Zalecamy korzystanie z funkcji wygładzania obrazu w Unity, o ile to możliwe. Pamiętaj, że podczas kompilowania aplikacji na Androida XR zalecamy używanie zarówno URP, jak i Vulkan.

Nieograniczony obszar odniesienia

nie dotyczy

Android XR: nieograniczony obszar odniesienia

Ta funkcja ustawia tryb pochodzenia śledzenia XRInputSubsystem na Bez ograniczeń. Unbounded wskazuje, że XRInputSubsystem śledzi wszystkie urządzenia wejściowe w odniesieniu do punktu zaczepienia świata, który może się zmieniać.

Tryb mieszania środowiska

nie dotyczy

Tryb mieszania środowiska

Ta funkcja umożliwia ustawienie trybu mieszania środowiska XR, który kontroluje sposób mieszania obrazów wirtualnych ze środowiskiem rzeczywistym po włączeniu funkcji przepuszczania.

Wprowadzanie danych i interakcje

Android XR obsługuje multimodalne wprowadzanie naturalne.

Oprócz śledzenia oka i ręki 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ą rąk, a 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 komunikacji aplikacji XR 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ójność działania na różnych platformach. Dzięki włączeniu profili interakcji możesz mieć pewność, że aplikacja XR będzie prawidłowo działać na różnych urządzeniach, będzie zachowywać spójne mapowanie danych wejściowych i zyska 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ę wtyczki (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 z ręką

Interakcja z rękami (XR_EXT_hand_interaction) jest obsługiwana przez wtyczkę OpenXR, a  układ urządzenia możesz wyświetlić w systemie wejściowym Unity, włączając profil interakcji z rękami. Użyj tego profilu interakcji do obsługi poleceń dłoni za pomocą 4 pozycji działania zdefiniowanych przez OpenXR: „szczypnięcie”, „ukłucie”, „celowanie” i „chwytanie”. Jeśli potrzebujesz dodatkowych funkcji interakcji z rękami lub śledzenia dłoni, zapoznaj się z XR Hands na tej stronie.

Interakcja z okiem

Interakcja z okiem (XR_EXT_eye_gaze_interaction) jest obsługiwana przez rozszerzenie OpenXR. Możesz użyć tego układu, aby pobrać dane dotyczące pozycji i obrotu oka, które zwraca rozszerzenie. Więcej informacji o interakcjach z użyciem oka 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 z myszą w Androidzie XR (XR_ANDROID_mouse_interaction) jest udostępniany przez rozszerzenia Androida XR dla Unity. Udostępnia ona układ <AndroidXRMouse> urządzenia w systemie wejściowym Unity.

Interakcja z palmą

Wtyczka OpenXR obsługuje interakcję Palm Pose (XR_EXT_palm_pose), która udostępnia układ <PalmPose>systemie wejściowym Unity. Poza dłoni nie jest alternatywą dla rozszerzeń ani pakietów, które wykonują śledzenie dłoni w bardziej złożonych przypadkach użycia. Można jej natomiast używać do umieszczania treści wizualnych związanych z konkretną aplikacją, np. obrazów awatara. Pozycja dłoni obejmuje zarówno jej położenie, jak i orientację.

XR Hands

Pakiet XR Hands zapewnia dostęp do danych śledzenia rąk (XR_EXT_hand_trackingXR_FB_hand_tracking_aim) oraz umożliwia konwertowanie danych dotyczących stawów dłoni z wykorzystaniem śledzenia rąk na dane wejściowe dotyczące póz. Aby korzystać z funkcji udostępnianych przez pakiet XR Hands, włącz funkcje Subsystem śledzenia rąkMeta Hand Tracking Aim OpenXR.

Przykład pokazujący, jak włączyć śledzenie rąk

Pakiet dłoni XR może być przydatny, jeśli potrzebujesz bardziej szczegółowych danych dotyczących pozycji dłoni lub stawów dłoni albo jeśli chcesz pracować z niestandardowymi gestami.

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

Wybierz sposób renderowania rąk

Android XR obsługuje 2 sposoby renderowania dłoni: za pomocą siatki dłoni i gotowego wizualizera.

Siatka ręczna

Pakiet Unity na 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 na celu zapewnienie spersonalizowanej siatki, która przedstawia rzeczywistą geometrię dłoni użytkownika na potrzeby wizualizacji.

XR Hands prefab

Pakiet XR Hands zawiera przykład o nazwie Hands visualizer, który zawiera w pełni zdefiniowane lewą i prawą rękę do renderowania obrazu dłoni użytkownika w odpowiednim kontekście.

Gesty systemowe

Android XR zawiera gest systemowy, który pozwala użytkownikom otworzyć menu, aby wrócić, otworzyć program uruchamiający lub wyświetlić przegląd obecnie uruchomionych aplikacji. Użytkownik może aktywować to menu systemowe, używając kciuka i wskaźnika.

Gdy użytkownik korzysta z menu nawigacyjnego systemu, aplikacja będzie reagować tylko na zdarzenia śledzenia ruchów głowy. Pakiet XR Hands może wykrywać, kiedy użytkownik wykonuje określone czynności, takie jak nawigacja po menu systemu. Sprawdzanie wartości AimFlags SystemGesture i DominantHand pozwoli Ci dowiedzieć się, kiedy to działanie systemowe zostało wykonane. Więcej informacji o AimFlags znajdziesz w dokumentacji Unity dotyczącej typu MetaAimFlags.

Zestaw narzędzi do interakcji w XR

Pakiet XR Interaction Toolkit to ogólny system interakcji oparty na komponentach, przeznaczony do tworzenia doświadczeń VR i AR. Zapewnia ono strukturę, która umożliwia interakcje 3D i interfejsu użytkownika na podstawie zdarzeń wejściowych Unity. Obsługuje zadania związane z interakcją, w tym reakcję na dotyk, wizualną reakcję i ruchy.