Якорь описывает местоположение и ориентацию в реальном мире. Прикрепление объекта к якорю помогает объектам выглядеть реалистично в реальном мире и экономить заряд батареи, поскольку приложению не нужно выполнять логику каждый кадр.
Как получить доступ к сеансу
Создавайте якоря с помощью ARCore для Jetpack XR Session. Если вы улучшаете пространственный интерфейс с помощью Jetpack Compose для XR, получите доступ к сеансу из Jetpack Compose для XR. Если вы работаете с пространственными объектами из библиотеки Jetpack SceneCore, получите доступ к сеансу из Jetpack XR Runtime.
Как настроить сеанс
Для создания и загрузки якорей не требуется настраивать сеанс.
Однако сохранение якорей по умолчанию не включено в сеансах XR. Чтобы сохранять и загружать якоря из локального хранилища, настройте сеанс и задайте режим AnchorPersistenceMode.LOCAL:
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. */) }
Как привязать контент к определенному месту
Якорь создается с помощью Pose, который можно интерпретировать относительно существующего Anchorable или зафиксировать в мире. Anchorable – это Trackable, к которому можно прикрепить якоря.
Как создать якорь относительно объекта Anchorable
Если создать якорь относительно Anchorable, например Plane, то якорь будет следовать за прикрепленным Anchorable, когда тот перемещается в пространстве.
val anchor = plane.createAnchor(pose)
Как создать якорь, закрепленный в мире
Чтобы создать якорь, закрепленный в мире, не прикрепляйте его к объекту Anchorable. Используйте этот тип якоря только для точек, которые плавают в пространстве, поскольку оценка сеанса местоположения неподвижных объектов меняется со временем:
val anchor = Anchor.create(session, pose)
Как прикрепить объект к якорю
Чтобы отрисовать модель в этом месте, создайте GltfModel и задайте для его родительского элемента значение AnchorSpace.
AnchorSpace.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
Что такое TrackingState
У каждого Trackable есть TrackingState, который нужно проверить перед использованием.
Trackable со значением TrackableState, равным Tracking, активно обновляется системой.Pose Trackable со статусом Paused может в
будущем стать Tracking, а со статусом Stopped никогда не станет Tracking.
Как сохранить якорь между сеансами
Якорь, который не сохраняется, исчезает после завершения сеанса. При сохранении якоря приложение запоминает его положение в своих частных данных. Его можно будет получить в следующем сеансе, и он будет привязан к тому же местоположению в мире.
Чтобы сохранить якорь, используйте Anchor.persist(), как показано ниже.
val uuid = anchor.persist()
В будущем сеансе приложение может получить якорь, используя UUID:
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
Когда якорь больше не нужен, вызовите метод unpersist(). Это удаляет якорь из хранилища приложения и делает указанный UUID недоступным для вызовов Anchor.load().
Anchor.unpersist(session, uuid)
Приложение также может запросить список всех сохраненных якорей, которые по-прежнему находятся в хранилище приложения:
val uuids = Anchor.getPersistedAnchorUuids(session)