Kotwica opisuje stałą lokalizację i orientację w świecie rzeczywistym. Przymocowanie obiektu do punktu zakotwiczenia sprawia, że obiekt wygląda realistycznie w świecie rzeczywistym.
Tworzenie sesji ARCore w Jetpack XR
Twórz kotwice w sesji ARCore w Jetpack XR. Aby uzyskać Session
, przeczytaj artykuł Omówienie cyklu życia sesji.
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 = Config.AnchorPersistenceMode.LOCAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
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 Trackable
lub nie.
Tworzenie kotwicy względem obiektu Trackable
Gdy kotwica jest tworzona względem Trackable
, np. Plane
, dzięki czemu kotwica podąża za dołączonym Trackable
, gdy ten porusza się w przestrzeni.
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Tworzenie kotwicy bez obiektu Trackable
Aby utworzyć kotwicę, która nie jest dołączona do Trackable
:
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
, jest aktywnie aktualizowany przez system.Pose
Trackable
, które jest Paused
, może w przyszłości stać się Tracking
, natomiast Stopped
nigdy nie stanie 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 kotwica nie będzie już potrzebna, kliknij 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 aplikacji:
val uuids = Anchor.getPersistedAnchorUuids(session)