Tworzenie aplikacji na Androida XR w Unity

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

Ten przewodnik zawiera 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 konfigurowaniu 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 pojęcia 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 takie tematy jak 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 do zarządzania wtyczkami XR i oferowania pomocy w zakresie ich wczytywania, inicjowania, ustawień i obsługi kompilacji. Aby umożliwić aplikacji wykonywanie funkcji OpenXR w czasie działania, musisz włączyć te funkcje w projekcie za pomocą menedżera wtyczek.

Ten obraz pokazuje przykład miejsca, w którym można włączyć te grupy funkcji w edytorze Unity.

Przykład ekranu zarządzania wtyczką Unity XR

Unity OpenXR Android XR

Pakiet Unity OpenXR Android XR to wtyczka XR, która dodaje obsługę Androida XR w 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 rzeczywistości mieszanej. 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 rozwiązania. 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 przewodnikiem po importowaniu rozszerzeń Androida XR dla Unity.

Funkcje i kwestie związane ze zgodnością

W tej tabeli 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 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 gry 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 gry z kamerą i TrackedPoseDriver.

Aparat

Android XR: Aparat AR

Nie dotyczy

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

Wykrywanie płaszczyzny

Android XR: płaszczyzna AR

Android XR (Extensions): Plane

Te 2 funkcje są identyczne. Użyj 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 pakiecie Unity OpenXR Android XR. W przyszłości interfejs Android XR (Extensions): Plane zostanie usunięty na rzecz interfejsu Android XR: AR Anchor.

Śledzenie obiektów

Nie dotyczy

Android XR (Extensions): Object Tracking

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 mogą być używane razem.

Rzutowanie promieni

Android XR: AR Raycast

  • Kotwica samolotu
  • Kotwica głębi

Nie dotyczy

Ta funkcja umożliwia rzutowanie promienia i obliczanie punktu przecięcia tego promienia z obiektami śledzonymi w 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 umożliwia ukrywanie lub częściowe zasłanianie treści w rzeczywistości mieszanej w aplikacji przez obiekty w środowisku fizycznym.

Dane 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

Korzystaj z funkcji Unity Composition Layer Support, 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ą, odczytującą dane z GameObject w Unity.

Renderowanie foveated

Renderowanie z ogniskowaniem (wymagana wtyczka OpenXR)

  • Obsługa renderowania foveated śledzonego wzrokiem: 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 wzroku w Unity. Pamiętaj, że w przypadku tworzenia aplikacji na Androida XR zalecane są zarówno URP, jak i Vulkan.

Nieograniczona przestrzeń odniesienia

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ę z otoczeniem w świecie rzeczywistym, gdy włączony jest tryb widoku otoczenia.

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, co zapewnia 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 z użyciem dłoni

Interakcja z użyciem dłoni (XR_EXT_hand_interaction) jest zapewniana przez wtyczkę OpenXR. Możesz udostępnić układ urządzenia w systemie wprowadzania danych Unity, włączając profil interakcji z użyciem dłoni.<HandInteraction> Użyj tego profilu interakcji w przypadku wprowadzania danych za pomocą dłoni obsługiwanego przez 4 pozycje działania zdefiniowane przez OpenXR: „szczypanie”, „dotykanie”, „celowanie” i „chwytanie”. Jeśli potrzebujesz dodatkowych funkcji interakcji z użyciem rąk 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 <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. Można jej natomiast używać do umieszczania treści wizualnych specyficznych dla aplikacji, takich jak awatary. Pozycja dłoni obejmuje zarówno jej położenie, jak i orientację.

Ręce XR

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 włączania śledzenia dłoni

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 rąk XR 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 do stopniowego wyłączania kształtów mieszanych lub stosowania filtrów wizualnych (np. rozmycia) do odpowiedniego obszaru twarzy. Aby wyłączyć podstawowe kształty mieszane, dezaktywuj je w odpowiednim regionie 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 prefabrykowany wizualizator.

Siatka dłoni

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 jest przeznaczona 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 animowane lewą i prawą dłoń do renderowania odpowiedniej reprezentacji dłoni użytkownika.

Gesty systemowe

Android XR zawiera gest systemowy, który umożliwia użytkownikom otwieranie menu, aby cofnąć się, otworzyć menu z aplikacjami lub wyświetlić 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 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 opcji 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. Umożliwia ona interakcje 3D i interfejsu użytkownika na podstawie zdarzeń wejściowych Unity. Obsługuje zadania związane z interakcją, w tym reakcje haptyczne, wizualne 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.