Tworzenie punktów orientacyjnych za pomocą ARCore w Jetpack XR

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

Kotwica opisuje stałą lokalizację i orientację w świecie rzeczywistym. Dołączenie obiektu do punktu zakotwiczenia pomaga realistycznie umieścić obiekty w świecie rzeczywistym.

Dostęp do sesji

Twórz kotwice za pomocą ARCore dla Jetpack XRSession. Jeśli ulepszasz przestrzenną UI za pomocą Jetpack Compose na XR, uzyskaj dostęp do sesji z poziomu Jetpack Compose na XR. Jeśli pracujesz z obiektami przestrzennymi z biblioteki Jetpack SceneCore, uzyskaj dostęp do sesji z Jetpack XR Runtime.

Konfigurowanie sesji

Tworzenie i wczytywanie kotwic nie wymaga skonfigurowania sesji. Jednak w sesjach XR trwałość kotwic nie jest domyślnie włączona. Aby utrwalać i wczytywać kotwice z pamięci lokalnej, skonfiguruj sesję i ustaw tryb AnchorPersistenceMode.LOCAL:

val newConfig = session.config.copy(
    anchorPersistence = AnchorPersistenceMode.LOCAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

android.permission.SCENE_UNDERSTANDING_COARSE

Przytwierdzanie treści do stałego miejsca w przestrzeni

Punkt zakotwiczenia jest tworzony za pomocą elementu Pose, który może być interpretowany względem istniejącego elementu Anchorable lub nie. Anchorable to Trackable, do którego można dołączyć kotwice.

Tworzenie kotwicy względem elementu Anchorable

Gdy kotwica jest tworzona względem Anchorable, np. Plane, kotwica śledzi dołączony Anchorable, gdy ten porusza się w przestrzeni.

when (val result = anchorable.createAnchor(pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

Tworzenie kotwicy bez elementu Anchorable

Aby utworzyć kotwicę, która nie jest dołączona do Anchorable:

when (val result = Anchor.create(session, pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

Dołączanie elementu do kotwicy

Aby wyrenderować model w tej lokalizacji, utwórz GltfModel i ustaw jego element nadrzędny na AnchorEntity.

AnchorEntity.create(session, anchor).apply {
    parent = session.scene.activitySpace
    addChild(entity)
}

Informacje o stanie śledzenia

Każdy Trackable ma TrackingState, który należy sprawdzić przed użyciem. Trackable, który ma TrackableState o wartości Tracking, ma Pose aktywnie aktualizowany przez system. Trackable, które są Paused, mogą w przyszłości stać się Tracking, natomiast te, które są Stopped, nigdy nie staną się Tracking.

Zachowywanie kotwicy w sesjach

Kotwica, która nie jest trwale zapisana, znika po zakończeniu sesji. Zapisując kotwicę, aplikacja zapamiętuje jej położenie w prywatnych danych aplikacji. Można go pobrać w kolejnej sesji i jest on zakotwiczony w tym samym miejscu na świecie.

Aby utrwalić kotwicę, użyj Anchor.persist(), jak pokazano poniżej:

val uuid = anchor.persist()

Aplikacja może pobrać kotwicę, używając w przyszłej sesji funkcji UUID:

when (val result = Anchor.load(session, uuid)) {
    is AnchorCreateSuccess -> {
        // Loading was successful. The anchor is stored in result.anchor.
    }
    else -> {
        // handle failure
    }
}

Gdy nie potrzebujesz już kotwicy, zadzwoń pod numer unpersist(). Spowoduje to usunięcie kotwicy z pamięci aplikacji i uniemożliwi pobranie danego identyfikatora UUID w przypadku wywołań funkcji Anchor.load().

Anchor.unpersist(session, uuid)

Aplikacja może też poprosić o listę wszystkich zapisanych kotwic, które nadal znajdują się w pamięci masowej aplikacji:

val uuids = Anchor.getPersistedAnchorUuids(session)