Создайте привязки с помощью ARCore для Jetpack XR

Якорь описывает фиксированное местоположение и ориентацию в реальном мире. Прикрепление объекта к якорю помогает объектам выглядеть реалистично расположенными в реальном мире.

Создайте сеанс 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)