Anchor は、現実世界での固定された位置と向きを表します。 オブジェクトをアンカーにアタッチすると、オブジェクトが現実世界にリアルに配置されているように見えます。
セッションにアクセスする
アンカーは、ARCore for Jetpack XR Session を使用して作成します。Jetpack Compose for XR を使用して
空間 UI を強化している場合は、Jetpack Compose for XR からセッションにアクセスします。Jetpack SceneCore ライブラリの空間化されたエンティティ
を使用している場合は、Jetpack XR
Runtimeからセッションにアクセスします。
セッションを構成する
アンカーの作成と読み込みにセッションの構成は必要ありません。
ただし、アンカーの永続化は XR セッションでデフォルトで有効になっていません。アンカーをローカル ストレージに保存して読み込むには、セッションを構成して
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. */) }
空間内の固定された場所にコンテンツをアンカーする
アンカーは Pose を使用して作成されます。これは、
既存の Anchorable を基準に解釈することも、基準にしないこともできます。Anchorable は、Trackable
アンカーをアタッチできるです。
Anchorable を基準にアンカーを作成する
アンカーが Anchorable(Plane など)を基準に作成されると、アンカーは空間内を移動するときにアタッチされた Anchorable に追従します。
val anchor = plane.createAnchor(pose)
Anchorable なしでアンカーを作成する
Anchorable にアタッチされていないアンカーを作成するには:
val anchor = Anchor.create(session, pose)
エンティティをアンカーにアタッチする
この場所にモデルをレンダリングするには、GltfModel を作成して、その
親を AnchorSpace に設定します。
AnchorEntity.create(session, anchor).apply { parent = 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() を呼び出します。これにより、アプリのストレージからアンカーが削除され、
`Anchor.load()` の呼び出しで指定された UUID を取得できなくなります。Anchor.load()
Anchor.unpersist(session, uuid)
アプリは、アプリのストレージにまだ存在する永続化されたすべてのアンカーのリストをリクエストすることもできます。
val uuids = Anchor.getPersistedAnchorUuids(session)