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)