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.
Acessar uma sessão
Crie âncoras usando um Session do ARCore para Jetpack XR. Se você estiver
melhorando a interface espacial usando o Jetpack Compose para XR, acesse uma sessão do
Jetpack Compose para XR. Se você estiver trabalhando com entidades espacializadas
da biblioteca Jetpack SceneCore, acesse uma sessão do Jetpack XR
Runtime.
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 em sessões de XR. Para manter
e carregar âncoras do armazenamento local, configure a sessão e defina o modo
AnchorPersistenceMode.LOCAL:
val newConfig = Config.Builder(session.config) .setAnchorPersistence(AnchorPersistenceMode.LOCAL) .build() when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
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 Anchorable existente ou não. Um Anchorable é um Trackable
que pode ter âncoras anexadas.
Criar uma âncora relativa a um Anchorable
Quando uma âncora é criada em relação a um Anchorable, como um Plane, que
faz com que a âncora siga o Anchorable anexado quando ele se move pelo espaço.
val anchor = plane.createAnchor(pose)
Criar uma âncora sem um elemento Anchorable
Para criar uma âncora que não está anexada a um Anchorable:
val anchor = Anchor.create(session, pose)
Anexar uma entidade a uma âncora
Para renderizar um modelo nesse local, crie um GltfModel e defina o pai dele como um AnchorSpace.
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 que tem um TrackableState de Tracking tem o Pose atualizado ativamente pelo sistema. Um Trackable que é Paused pode se tornar Tracking no futuro, enquanto um que é Stopped nunca se tornará Tracking.
Persistir 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 fica 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 para 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)