Dodawanie podprzestrzeni, która podąża za celem

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

Standardowy element Subspace pozostaje w stałej pozycji określonej przez system, ale czasami możesz chcieć, aby przestrzenny interfejs aplikacji poruszał się dynamicznie wraz z użytkownikiem lub pozostawał w określonym miejscu w środowisku lub w świecie rzeczywistym. Możesz przekazać FollowTarget do parametru follow funkcji Subspace, aby tworzyć takie elementy jak wyświetlacze HUD zablokowane na głowie lub panele informacyjne dołączone do obiektów w świecie rzeczywistym.

Dodawanie podprzestrzeni, która podąża za widokiem użytkownika

Aby dodać podprzestrzeń, która jest umieszczona względem pola widzenia użytkownika, użyj FollowTarget.view. W zależności od wybranego trybu śledzenia możesz stale śledzić ruchy głowy użytkownika lub umieszczać treści statycznie na podstawie tego, gdzie patrzy. Możesz używać tej funkcji do wyświetlania informacji na ekranie, trwałych powiadomień lub elementów sterujących szybkimi działaniami.

Deklarowanie i proszenie o uprawnienia

Zanim poprosisz o uprawnienia, musisz zadeklarować je w pliku manifestu aplikacji za pomocą elementu <uses-permission>.

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for head tracking. -->
    <uses-permission android:name="android.permission.HEAD_TRACKING"/>
    <application ...>
        ...
    </application>
</manifest>

Teraz poproś o uprawnienia. Aby dowiedzieć się więcej, zapoznaj się z zasadami i procesami dotyczącymi uprawnień. Dzięki temu zapewnisz użytkownikom jak najlepsze wrażenia, np. sprawdzając, czy użytkownik przyznał już uprawnienia w czasie działania, których wymaga Twoja aplikacja, oraz czy aplikacja powinna wyświetlić uzasadnienie, zanim poprosi o te uprawnienia.

Konfigurowanie sesji

Następnie skonfigurujesz sesję aplikacji, która jest tworzona podczas korzystania z Jetpack Compose for XR, ustawiając DeviceTrackingMode.SPATIAL:

val session = checkNotNull(LocalSession.current)
session.configure(
    config = Config.Builder(session.config).setDeviceTracking(DeviceTrackingMode.SPATIAL)
        .build()
)

Tworzenie podprzestrzeni

Na koniec utworzysz podprzestrzeń, która będzie kierowana na widok użytkownika, wraz z trybem śledzenia:

// Example: A subspace that softly follows the user's view (like a HUD)
Subspace(
    follow = FollowTarget.view(
        // Customizing the soft follow to move slightly faster and tracking all dimensions
        mode = FollowMode.soft(
        )
    ),
    modifier = modifier,
) {
    SpatialPanel {
      // SpatialPanel Content
    }
}

Tryby śledzenia w podprzestrzeniach, które są ukierunkowane na widok użytkownika

Gdy jako element docelowy używasz FollowTarget.view, możesz dostosować zachowanie treści, określając FollowMode:

  • FollowMode.soft: treść stopniowo nadąża za ruchami celu, tworząc płynny efekt unoszenia się.
  • FollowMode.snap: treść jest umieszczana przed użytkownikiem raz na podstawie jego początkowej pozycji widoku, a następnie pozostaje nieruchoma.
  • FollowMode.tight: treści natychmiast śledzą widok użytkownika z minimalnym opóźnieniem, dzięki czemu są ściśle powiązane z jego ruchem.

Wszystkie tryby śledzenia umożliwiają wybór wymiarów ruchu, które mają być śledzone, spośród tych opcji:

  • Oś X
  • Oś Y
  • Prezentowanie
  • Rolka
  • Odchylenie
  • RotationOnly: umożliwia określenie pojedynczej wartości do śledzenia wymiarów związanych z obrotem (nachylenie, odchylenie i przechylenie).

Możesz wybrać dowolną kombinację tych wymiarów lub użyć wartości domyślnej TrackedDimensions.All, która śledzi je wszystkie.

Dodawanie podprzestrzeni, która podąża za elementem otoczenia

Aby dodać podprzestrzeń, która ściśle blokuje treści przestrzenne w fizycznym obiekcie w środowisku użytkownika, użyj FollowTarget.anchor(). Użyj tego typu celu, aby śledzić wykrytą płaszczyznę, kotwicę lub lokalizację geoprzestrzenną.

Śledzenie obiektów w świecie rzeczywistym wymaga dodatkowych uprawnień i konfiguracji sesji w zależności od śledzonego obiektu.

Szczegółowe instrukcje dotyczące korzystania z funkcji percepcji ARCore, a także konfigurowania niezbędnych uprawnień i sesji do korzystania z FollowTarget.anchor() znajdziesz w dokumentacji pakietu Jetpack XR SDK dotyczącej płaszczyzn, kotwic i pozycji geoprzestrzennych.

Poniższy przykład tworzy podprzestrzeń, która podąża za kotwicą rzeczywistą:

// A subspace locked to a real-world anchor
Subspace(
    follow = FollowTarget.anchor(anchor = myAnchor)
) {
    // Rotate the panel to ensure it faces the user while remaining anchored
    SpatialPanel(SubspaceModifier.rotateToLookAtUser()) {
      // SpatialPanel Content
    }
}

Unikaj nakładania się przestrzennego.

Każda utworzona przestrzeń podrzędna Subspace zarządza własną niezależną sceną 3D i nie ma informacji o innych istniejących przestrzeniach podrzędnych, więc nie unika automatycznie kolizji.

Aby zapobiec przenikaniu HUD-a zablokowanego na głowie przez zakotwiczone panele ciekawych miejsc (tzw. Z-fighting), wyraźnie zarządzaj objętościami układu za pomocą tych metod:

  1. Używaj przesunięć: używaj SubspaceModifier.offset, aby przesunąć peryferyjny interfejs (np. HUD) bliżej lub dalej na osi Z albo na krawędzie pola widzenia użytkownika.
  2. Ograniczanie rozmiarów: stosuj modyfikatory takie jak requiredSizeIn, aby ograniczyć ramki ograniczające przestrzeni.

Więcej informacji o przestrzeniach współrzędnych, ograniczeniach układu i wszystkich dostępnych konfiguracjach śledzenia znajdziesz w dokumentacji referencyjnej Subspace.