Uma âncora descreve um local e uma orientação fixos no mundo real. Anexar um objeto a uma âncora ajuda a fazer com que os objetos pareçam colocados de forma realista no mundo real.
Criar uma sessão do ARCore para Jetpack XR
Crie âncoras usando uma sessão do ARCore para Jetpack XR. Consulte Entender o ciclo de vida de uma sessão para receber um Session
.
Configurar a sessão
Não é necessário configurar a sessão para criar e carregar âncoras.
No entanto, a persistência de âncoras não está ativada por padrão nas sessões de RV/RA. Para manter
e carregar âncoras do armazenamento local, configure a sessão e defina o modo
AnchorPersistenceMode.LOCAL
:
val newConfig = session.config.copy( anchorPersistence = Config.AnchorPersistenceMode.LOCAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
Ancorar conteúdo em um local fixo no espaço
Uma âncora é criada usando um Pose
, que pode ser interpretado em relação a um Trackable
existente ou não.
Criar uma âncora relativa a um rastreável
Quando uma âncora é criada em relação a um Trackable
, como um Plane
, que
faz com que a âncora siga o Trackable
anexado quando ele se move pelo espaço.
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Criar uma âncora sem um rastreável
Para criar uma âncora que não está anexada a um Trackable
:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Anexar uma entidade a uma âncora
Para renderizar um modelo nesse local, crie um GltfModel
e defina o elemento pai dele como um AnchorEntity
.
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
Entender TrackingState
Cada Trackable
tem um TrackingState
que precisa ser verificado antes do uso.
Um Trackable
com um TrackableState
de Tracking
tem o Pose
atualizado ativamente pelo sistema. Um Trackable
Paused
pode se tornar Tracking
no futuro, enquanto um Stopped
nunca vai se tornar Tracking
.
Manter uma âncora em todas as sessões
Uma âncora não persistente desaparece depois que uma sessão é destruída. Ao persistir uma âncora, o app lembra a posição dela nos dados privados do app. Essa âncora pode ser recuperada em uma sessão subsequente e é ancorada no mesmo local do mundo.
Para manter uma âncora, use Anchor.persist()
, conforme mostrado aqui:
val uuid = anchor.persist()
Seu app pode recuperar a âncora usando o UUID
em uma sessão futura:
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
Quando você não precisar mais de uma âncora, chame unpersist()
. Isso remove
a âncora do armazenamento do app e torna o UUID especificado irrecuperável para
chamadas a Anchor.load()
.
Anchor.unpersist(session, uuid)
Seu app também pode solicitar uma lista de todas as âncoras persistidas que ainda estão presentes no armazenamento do app:
val uuids = Anchor.getPersistedAnchorUuids(session)