Якорь описывает фиксированное местоположение и ориентацию в реальном мире. Прикрепление объекта к якорю помогает объектам выглядеть реалистично расположенными в реальном мире.
Создайте сеанс ARCore для Jetpack XR
Создавайте якоря через сеанс ARCore для Jetpack XR. Чтобы получить Session
, см . раздел «Понимание жизненного цикла сеанса» .
Настроить сеанс
Создание и загрузка якорей не требует настройки сеанса. Однако сохранение якорей по умолчанию в сеансах XR отключено. Чтобы сохранять и загружать якоря из локального хранилища, настройте сеанс и установите режим 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. */) }
Прикрепить контент к фиксированному месту в пространстве
Якорь создается с использованием Pose
, который может интерпретироваться относительно существующего Trackable
или нет.
Создайте якорь относительно отслеживаемого объекта
Когда якорь создается относительно Trackable
объекта, например, Plane
, это заставляет якорь следовать за прикрепленным Trackable
при его перемещении в пространстве.
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Создайте якорь без отслеживаемого объекта
Чтобы создать якорь, не прикрепленный к Trackable
:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Прикрепить объект к якорю
Чтобы визуализировать модель в этом месте, создайте GltfModel
и установите для ее родителя AnchorEntity
.
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
Понять TrackingState
У каждого Trackable
есть TrackingState
, которое следует проверить перед использованием. Trackable
Pose
TrackableState
Tracking
активно обновляется системой. Paused
Trackable
может в будущем стать 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)