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

Применимые устройства XR
Данное руководство поможет вам создавать приложения для устройств XR такого типа.
XR-гарнитуры
Проводные XR-очки

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

Получить доступ к сессии

Создавайте якоря через Session ARCore для Jetpack XR. Если вы улучшаете пространственный пользовательский интерфейс с помощью Jetpack Compose for XR, получите доступ к сессии из Jetpack Compose for XR . Если вы работаете с пространственно-ориентированными объектами из библиотеки Jetpack SceneCore, получите доступ к сессии из Jetpack XR Runtime .

Настройте сессию

Создание и загрузка якорей не требуют настройки сессии. Однако сохранение якорей по умолчанию отключено в сессиях XR. Для сохранения и загрузки якорей из локального хранилища настройте сессию и установите режим AnchorPersistenceMode.LOCAL :

val newConfig = session.config.copy(
    anchorPersistence = 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 , который может интерпретироваться относительно существующего объекта Anchorable или нет. Объект Anchorable — это объект Trackable , к которому можно прикреплять якоря.

Создайте привязку относительно объекта Anchorable.

Когда якорь создается относительно объекта, к которому Anchorable , например, Plane , это заставляет якорь следовать за прикрепленным Anchorable когда тот перемещается в пространстве.

when (val result = anchorable.createAnchor(pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

Создать якорь без использования Anchoreable

Чтобы создать якорь, не привязанный к объекту Anchorable :

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 со значением 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)