Menambahkan subruang ke aplikasi

Subruang adalah partisi ruang 3D dalam aplikasi tempat Anda dapat menempatkan model 3D, membuat tata letak 3D, dan menambahkan kedalaman ke konten 2D. Subruang hanya dirender jika spatialisasi diaktifkan. Di Ruang Rumah atau di perangkat non-XR, kode apa pun dalam subruang tersebut akan diabaikan.

Anda dapat menggunakan @SubspaceComposable seperti Volume dan SpatialPanel untuk menempatkan model 3D. Beberapa komponen XR seperti Orbiter atau SpatialDialog adalah composable 2D standar yang dapat digunakan di mana saja dalam hierarki UI 2D, tetapi SubspaceComposable harus dipanggil di subruang aplikasi Anda. Untuk melakukannya, Anda akan menggunakan composable Subspace.

Seperti composable lainnya, Anda dapat memanggil Subspace langsung dalam hierarki UI 2D. Namun, penting untuk mengetahui implikasi tempat Anda memanggil Subspace dalam hierarki.

Tentang hierarki subspace

Subruang level teratas adalah subruang terluar yang dipanggil oleh aplikasi Anda. Subruang ini memiliki batas yang efektif tak terbatas, dan biasanya tempat Anda akan menempatkan tata letak spasial dan SpatialPanel aplikasi.

Namun, jika Anda menyusun subruang lain di dalam hierarki UI 2D di panel yang terdapat dalam subruang tingkat atas, subruang bertingkat tersebut akan berperilaku berbeda.

Subruang bertingkat memiliki dua perbedaan utama dari Subspace tingkat atas:

  • Mereka berpartisipasi dalam tata letak 2D tempat mereka dipanggil. Artinya, tinggi dan lebar subruang akan dibatasi oleh tinggi dan lebar tata letak induk 2D-nya.
  • Perilakunya sama seperti turunan entity tempatnya dipanggil. Artinya, jika Anda memanggil composable Subspace yang disusun bertingkat di dalam SpatialPanel, subruang tersebut akan menjadi turunan dari SpatialPanel tempatnya dipanggil.

Perilaku ruang sub-bertingkat ini memungkinkan kemampuan seperti:

  • Memindahkan turunan dengan entity induk
  • Menambahkan offset lokasi turunan menggunakan offset SubspaceModifier
  • Menampilkan objek 3D yang melayang di atas UI 2D dan cocok dengan tinggi dan lebar ruang yang sesuai dalam tata letak 2D

Menambahkan subruang ke aplikasi

Contoh kode berikut menunjukkan cara menambahkan subspace tingkat atas dan bertingkat ke aplikasi Anda.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    setContent {
        // This is a top-level subspace
        Subspace {
            SpatialPanel {
                MyComposable()
            }
        }
    }
}
@Composable
private fun MyComposable() {
    Row {
        PrimaryPane()
        SecondaryPane()
    }
}
@Composable
private fun PrimaryPane() {
      ...
    // This is a nested subspace, because PrimaryPane is in a SpatialPanel
    // and that SpatialPanel is in a top-level Subspace
    Subspace {
        ObjectInAVolume(show3DObject)
    }
      ...
}