Якорь описывает фиксированное местоположение и ориентацию в реальном мире. Прикрепление объекта к якорю помогает объектам выглядеть реалистично размещенными в реальном мире.
Создайте сеанс ARCore для Jetpack XR
Создайте якоря через сеанс ARCore для Jetpack XR. См. раздел Понимание жизненного цикла сеанса , чтобы получить Session
.
Настроить сессию
Создание и загрузка якорей не требует настройки сеанса. Однако сохранение якорей по умолчанию не включено в сеансах XR. Чтобы сохранить и загрузить якоря, настройте сеанс:
val newConfig = session.config.copy( anchorPersistence = Config.AnchorPersistenceMode.Enabled, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigurePermissionsNotGranted -> TODO(/* The required permissions in result.permissions have not been granted. */) is SessionConfigureSuccess -> TODO(/* Success! */) }
Прикрепить контент к фиксированному месту в пространстве
Якорь создается с помощью 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 { setParent(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)