Якорь описывает фиксированное местоположение и ориентацию в реальном мире. Прикрепление объекта к якорю помогает объектам выглядеть реалистично расположенными в реальном мире.
Создайте сеанс 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 SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Прикрепить контент к фиксированному месту в пространстве
Якорь создается с использованием 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)