锚点描述了现实世界中的固定位置和方向。将对象附加到锚点有助于对象在现实世界中呈现逼真的位置。
创建 ARCore for Jetpack XR 会话
通过 ARCore for 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 的锚点
当锚点相对于 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 并将其父级设置为 AnchorEntity。
AnchorEntity.create(session, anchor).apply { setParent(session.scene.activitySpace) addChild(entity) }
了解 TrackingState
每个 Trackable 都有一个 TrackingState,在使用前应进行检查。一个 Trackable 如果其 TrackableState 为 Tracking,则其 Pose 会被系统主动更新。处于 Paused 状态的 Trackable 可能在将来变为 Tracking,而处于 Stopped 状态的 Trackable 则永远不会变为 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)