Anchor menjelaskan lokasi dan orientasi tetap di dunia nyata. Melampirkan objek ke anchor membantu objek tampak ditempatkan secara realistis di dunia nyata.
Membuat sesi ARCore untuk Jetpack XR
Membuat anchor melalui sesi ARCore untuk Jetpack XR. Lihat
Memahami siklus proses Sesi
untuk mendapatkan Session
.
Mengonfigurasi Sesi
Membuat dan memuat anchor tidak memerlukan konfigurasi sesi. Namun, persistensi anchor tidak diaktifkan secara default pada sesi XR. Untuk mempertahankan dan memuat anchor, konfigurasikan sesi:
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! */) }
Mengaitkan konten ke lokasi tetap dalam ruang
Anchor dibuat menggunakan Pose
, yang dapat
ditafsirkan secara relatif terhadap Trackable
yang ada atau tidak.
Membuat anchor yang relatif terhadap Trackable
Saat anchor dibuat relatif terhadap Trackable
, seperti Plane
, yang
membuat anchor mengikuti Trackable
yang terpasang saat bergerak melalui ruang.
when (val result = trackable.createAnchor(pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Membuat anchor tanpa Trackable
Untuk membuat anchor yang tidak terpasang ke Trackable
:
when (val result = Anchor.create(session, pose)) { is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ } else -> { /* handle failure */ } }
Melampirkan entitas ke anchor
Untuk merender model di lokasi ini, [buat GltfModel
][5] dan tetapkan induknya
ke AnchorEntity
.
AnchorEntity.create(session, anchor).apply { setParent(session.activitySpace) addChild(entity) }
Memahami TrackingState
Setiap Trackable
memiliki TrackingState
yang harus diperiksa sebelum digunakan.
Trackable
yang memiliki TrackableState
Tracking
memiliki Pose
yang secara aktif
diupdate oleh sistem. Trackable
yang merupakan Paused
dapat menjadi Tracking
di
masa mendatang, sedangkan 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 dalam sesi berikutnya dan ditautkan 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 anchor 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 anchor, 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)