Anchor menjelaskan lokasi dan orientasi tetap di dunia nyata. Melampirkan objek ke anchor membantu objek tampak ditempatkan secara realistis di dunia nyata.
Mengakses sesi
Buat anchor melalui ARCore untuk Jetpack XR Session. Jika Anda
meningkatkan kualitas UI spasial menggunakan Jetpack Compose untuk XR, akses sesi dari
Jetpack Compose untuk XR. Jika Anda bekerja dengan entitas spasial
dari library Jetpack SceneCore, akses sesi dari Jetpack XR
Runtime.
Mengonfigurasi sesi
Pembuatan dan pemuatan anchor tidak memerlukan konfigurasi sesi.
Namun, persistensi penanda tidak diaktifkan secara default pada sesi XR. Untuk mempertahankan
dan memuat penanda dari penyimpanan lokal, konfigurasikan sesi dan tetapkan mode
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. */) }
Menyematkan konten ke lokasi tetap di ruang
Anchor dibuat menggunakan Pose, yang dapat ditafsirkan relatif terhadap
Anchorable yang ada atau tidak. Anchorable adalah Trackable
yang dapat memiliki anchor yang dilampirkan padanya.
Membuat anchor relatif terhadap Anchorable
Saat anchor dibuat relatif terhadap Anchorable, seperti Plane, yang membuat anchor mengikuti Anchorable yang terpasang saat bergerak melalui ruang.
when (val result = anchorable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Membuat anchor tanpa Anchorable
Untuk membuat anchor yang tidak terlampir ke Anchorable:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Menghubungkan entitas ke penanda
Untuk merender model di lokasi ini, buat GltfModel dan tetapkan
parent-nya ke AnchorEntity.
AnchorEntity.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
Memahami TrackingState
Setiap Trackable memiliki TrackingState yang harus diperiksa sebelum digunakan.
Trackable yang memiliki TrackableState Tracking akan diperbarui Pose-nya secara aktif oleh sistem. Trackable yang Paused dapat menjadi Tracking di
masa mendatang, sedangkan yang Stopped tidak akan pernah menjadi Tracking.
Mempertahankan Anchor di seluruh sesi
Anchor yang tidak dipertahankan akan menghilang setelah sesi dihancurkan. Dengan mempertahankan anchor, aplikasi Anda akan mengingat posisi anchor tersebut dalam data aplikasi pribadinya. Anchor ini dapat diambil pada sesi berikutnya dan di-anchor di lokasi yang sama di dunia.
Untuk mempertahankan anchor, gunakan Anchor.persist() seperti yang ditunjukkan di sini:
val uuid = anchor.persist()
Aplikasi Anda dapat mengambil penanda menggunakan UUID dalam sesi mendatang:
when (val result = Anchor.load(session, uuid)) { is AnchorCreateSuccess -> { // Loading was successful. The anchor is stored in result.anchor. } else -> { // handle failure } }
Jika Anda tidak lagi memerlukan penanda, panggil unpersist(). Tindakan ini akan menghapus
anchor dari penyimpanan aplikasi Anda dan membuat UUID yang diberikan tidak dapat diambil untuk
panggilan ke Anchor.load().
Anchor.unpersist(session, uuid)
Aplikasi Anda juga dapat meminta daftar semua anchor yang telah dipertahankan dan masih ada di penyimpanan aplikasi Anda:
val uuids = Anchor.getPersistedAnchorUuids(session)