Menambahkan subruang yang mengikuti target

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Headset XR
Kacamata XR Berkabel

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:

  1. Gunakan offset: Gunakan SubspaceModifier.offset untuk mendorong UI periferal (seperti HUD) lebih dekat atau lebih jauh pada sumbu Z, atau menggesernya ke tepi penglihatan pengguna.
  2. Membatasi ukuran: Terapkan pengubah seperti requiredSizeIn untuk 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.