Kotwica opisuje lokalizację i orientację w świecie rzeczywistym. Dołączenie obiektu do kotwicy sprawia, że obiekty wyglądają realistycznie w świecie rzeczywistym, a aplikacja oszczędza energię, ponieważ nie musi uruchamiać logiki w każdej klatce.
Dostęp do sesji
Twórz kotwice za pomocą ARCore dla Jetpack XR Session. Jeśli ulepszasz przestrzenny interfejs użytkownika za pomocą Jetpack Compose dla XR, uzyskaj dostęp do sesji z
Jetpack Compose dla XR. Jeśli pracujesz z przestrzennymi jednostkami
z biblioteki Jetpack SceneCore, uzyskaj dostęp do sesji z Jetpack XR
Runtime.
Konfigurowanie sesji
Tworzenie i wczytywanie kotwic nie wymaga konfigurowania sesji.
Jednak trwałość kotwicy nie jest domyślnie włączona w sesjach XR. Aby utrwalać
i wczytywać kotwice z pamięci lokalnej, skonfiguruj sesję i ustaw
AnchorPersistenceMode.LOCAL tryb:
val newConfig = Config.Builder(session.config) .setAnchorPersistence(AnchorPersistenceMode.LOCAL) .build() when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Kotwiczenie treści w przestrzeni
Kotwica jest tworzona za pomocą Pose, którą można interpretować względem
istniejącego elementu Anchorable lub ustalonego w świecie. Anchorable to
Trackable, do którego można dołączyć kotwice.
Tworzenie kotwicy względem elementu Anchorable
Gdy kotwica jest tworzona względem elementu Anchorable, np. Plane, kotwica podąża za dołączonym elementem Anchorable, gdy ten porusza się w przestrzeni.
val anchor = plane.createAnchor(pose)
Tworzenie kotwicy ustalonej w świecie
Aby utworzyć kotwicę ustaloną w świecie, nie dołączaj jej do elementu Anchorable. Używaj tego typu kotwicy tylko w przypadku punktów, które unoszą się w przestrzeni, ponieważ szacunki sesji dotyczące położenia nieruchomych obiektów zmieniają się z czasem:
val anchor = Anchor.create(session, pose)
Dołączanie jednostki do kotwicy
Aby renderować model w tej lokalizacji, utwórz GltfModel i ustaw jego
element nadrzędny na AnchorSpace.
AnchorSpace.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
Informacje o TrackingState
Każdy element Trackable ma TrackingState, który należy sprawdzić przed użyciem.
Element Trackable, który ma TrackableState ustawiony na Tracking, ma Pose aktywnie
aktualizowany przez system. Element Trackable o stanie Paused może w przyszłości zmienić stan na Tracking, natomiast element o stanie Stopped nigdy nie zmieni stanu na Tracking.
Utrwalanie kotwicy w sesjach
Kotwica, która nie jest utrwalona, znika po zakończeniu sesji. Utrwalając kotwicę, aplikacja zapamiętuje jej położenie w prywatnych danych aplikacji. Tę kotwicę można pobrać w kolejnej sesji i zakotwiczyć w tej samej lokalizacji na świecie.
Aby utrwalić kotwicę, użyj Anchor.persist() w sposób pokazany poniżej:
val uuid = anchor.persist()
Aplikacja może pobrać kotwicę, używając UUID w przyszłej sesji:
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 jest już potrzebna, wywołaj unpersist(). Spowoduje to usunięcie
kotwicy z pamięci aplikacji i uniemożliwi pobranie danego UUID za pomocą
wywołań Anchor.load().
Anchor.unpersist(session, uuid)
Aplikacja może też poprosić o listę wszystkich utrwalonych kotwic, które nadal znajdują się w pamięci aplikacji:
val uuids = Anchor.getPersistedAnchorUuids(session)