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