Meskipun Subspace standar tetap berada di posisi tetap yang ditentukan oleh
sistem, terkadang Anda mungkin ingin UI spasial aplikasi Anda bergerak secara dinamis
bersama pengguna atau tetap terpasang di lokasi tertentu di lingkungannya atau di
dunia nyata. Anda dapat meneruskan FollowTarget ke parameter follow dari
Subspace untuk membangun pengalaman seperti HUD yang terkunci di kepala atau panel informasi
yang terpasang pada objek dunia nyata.
Menambahkan subruang yang mengikuti tampilan pengguna
Untuk menambahkan subruang yang diposisikan relatif terhadap ruang pandang pengguna, gunakan
FollowTarget.view. Bergantung pada mode ikuti yang Anda tentukan, hal ini
memungkinkan Anda terus melacak gerakan kepala pengguna atau menempatkan konten
secara statis berdasarkan arah pandangan mereka. Anda dapat menggunakannya untuk hal-hal seperti
HUD, notifikasi persisten, atau kontrol tindakan cepat.
Mendeklarasikan dan meminta izin
Sebelum meminta izin, Anda harus mendeklarasikannya dalam file manifes aplikasi
menggunakan elemen <uses-permission>.
<manifest ...>
<!-- Only declare permissions that your app actually needs. In this example,
we declare permissions for head tracking. -->
<uses-permission android:name="android.permission.HEAD_TRACKING"/>
<application ...>
...
</application>
</manifest>
Sekarang, minta izin. Untuk informasi selengkapnya, tinjau prinsip dan alur kerja izin untuk memastikan Anda memberikan pengalaman terbaik bagi pengguna, seperti memeriksa apakah pengguna telah memberikan izin runtime yang diperlukan aplikasi Anda dan apakah aplikasi Anda harus menampilkan alasan kepada pengguna sebelum meminta izin ini.
Mengonfigurasi sesi Anda
Selanjutnya, Anda akan mengonfigurasi sesi aplikasi yang dibuat untuk Anda saat menggunakan
Jetpack Compose untuk XR dengan menetapkan DeviceTrackingMode.SPATIAL:
val session = checkNotNull(LocalSession.current)
session.configure(
config = Config.Builder(session.config).setDeviceTracking(DeviceTrackingMode.SPATIAL)
.build()
)
Membuat subruang
Terakhir, Anda akan membuat subruang yang menargetkan tampilan pengguna, bersama dengan mode ikuti:
// Example: A subspace that softly follows the user's view (like a HUD)
Subspace(
follow = FollowTarget.view(
// Customizing the soft follow to move slightly faster and tracking all dimensions
mode = FollowMode.soft(
)
),
modifier = modifier,
) {
SpatialPanel {
// SpatialPanel Content
}
}
Mode ikuti untuk subruang yang menargetkan tampilan pengguna
Saat menggunakan FollowTarget.view sebagai target, Anda dapat menyesuaikan perilaku konten dengan menentukan FollowMode:
FollowMode.soft: Konten secara bertahap mengikuti gerakan target, sehingga menciptakan efek mengambang yang halus.FollowMode.snap: Konten ditempatkan di depan pengguna satu kali berdasarkan pose tampilan awal mereka dan tetap diam setelahnya.FollowMode.tight: Konten melacak tampilan pengguna secara langsung dengan penundaan minimal, sehingga konten tetap terkait erat dengan gerakan pengguna.
Semua mode ikuti memungkinkan Anda memilih dimensi gerakan yang dilacak dari opsi berikut:
- Sumbu X
- Sumbu Y
- Promosi
- Lempar
- Yaw
RotationOnly: Memungkinkan Anda menentukan satu nilai untuk melacak dimensi yang terkait dengan rotasi (pitch, yaw, dan roll).
Anda dapat memilih kombinasi dimensi ini, atau menggunakan nilai default
TrackedDimensions.All yang melacak semuanya.
Menambahkan subruang yang mengikuti fitur lingkungan
Untuk menambahkan subruang yang mengunci konten spasial secara ketat ke fitur fisik
di lingkungan pengguna, gunakan FollowTarget.anchor(). Gunakan jenis target ini untuk mengikuti bidang yang terdeteksi, anchor, atau lokasi geospasial.
Pelacakan fitur dunia nyata memerlukan izin tambahan dan konfigurasi sesi, bergantung pada fitur yang Anda ikuti.
Untuk mengetahui petunjuk mendetail tentang cara menggunakan kemampuan persepsi untuk fitur
ARCore, serta menyiapkan izin yang diperlukan dan mengonfigurasi
sesi Anda untuk menggunakan FollowTarget.anchor(), lihat dokumentasi Jetpack XR SDK
untuk Bidang, Anchor, dan Pose geospasial.
Contoh berikut membuat subruang yang mengikuti anchor dunia nyata:
// A subspace locked to a real-world anchor
Subspace(
follow = FollowTarget.anchor(anchor = myAnchor)
) {
// Rotate the panel to ensure it faces the user while remaining anchored
SpatialPanel(SubspaceModifier.rotateToLookAtUser()) {
// SpatialPanel Content
}
}
Menghindari tumpang-tindih spasial
Setiap Subspace yang Anda buat mengelola adegan 3D independennya sendiri dan tidak
mengetahui subruang lain yang ada, sehingga tidak otomatis menghindari
tabrakan.
Untuk mencegah HUD yang terkunci di kepala terpotong oleh panel POI yang ditambatkan (Z-fighting), kelola volume tata letak Anda secara eksplisit menggunakan metode berikut:
- Gunakan offset: Gunakan
SubspaceModifier.offsetuntuk mendorong UI periferal (seperti HUD) lebih dekat atau lebih jauh pada sumbu Z, atau menggesernya ke tepi penglihatan pengguna. - Membatasi ukuran: Terapkan pengubah seperti
requiredSizeInuntuk membatasi kotak pembatas ruang Anda.
Untuk mengetahui informasi selengkapnya tentang ruang koordinat, batasan tata letak, dan semua
konfigurasi pelacakan yang tersedia, lihat dokumentasi referensi
Subspace.