Dodawanie podprzestrzeni do aplikacji

Subprzestrzeń to część przestrzeni 3D w aplikacji, w której możesz umieszczać modele 3D, tworzyć układy 3D i dodawać głębię do treści 2D. Subspace jest renderowany tylko wtedy, gdy włączona jest przestrzenność. W Home Space lub na urządzeniach bez XR kod w tym podprzestrzeni jest ignorowany.

Do umieszczania modeli 3D możesz używać @SubspaceComposable, takich jak Volume i SpatialPanel. Niektóre komponenty XR, takie jak Orbiter lub SpatialDialog, to standardowe komponenty 2D, których można używać w dowolnym miejscu w hierarchii interfejsu 2D. Jednak komponenty SubspaceComposable muszą być wywoływane w podprzestrzeni aplikacji. Aby to zrobić, użyj usługi komponowania Subspace.

Podobnie jak w przypadku innych komponentów, możesz wywoływać komponent Subspace bezpośrednio w hierarchii interfejsu 2D. Należy jednak pamiętać o konsekwencjach wywołania funkcji Subspace w danym miejscu hierarchii.

Hierarchie podprzestrzeni

Podprzestrzeń najwyższego poziomu to najbardziej zewnętrzna podprzestrzeń wywoływana przez aplikację. Ta podprzestrzeń ma praktycznie nieskończone granice i zazwyczaj jest to miejsce, w którym umieszczasz układ przestrzenny aplikacji i SpatialPanel.

Jeśli jednak w panelu zawartym w przestrzeni podrzędnej najwyższego poziomu umieścisz kolejną, zagnieżdżoną w niej, to ta ostatnia będzie się zachowywać inaczej.

Zagnieżdżone podprzestrzenie różnią się od najwyższego poziomu Subspace 2 głównymi różnicami:

  • Uwzględniają one układ 2D, w którym są wywoływane. Oznacza to, że wysokość i szerokość podprzestrzeni będą ograniczone przez wysokość i szerokość 2D układu nadrzędnego.
  • Zachowują się jak elementy podrzędne do elementu, w którym są wywoływane. Oznacza to, że jeśli wywołasz kompozyt Subspace zanurzony w komponencie SpatialPanel, ten podprzestrzeń będzie podrzędna do SpatialPanel, w której jest wywoływana.

Te zachowania zagnieżdżonego podprzestrzeni umożliwiają takie funkcje jak:

  • Przenoszenie elementu podrzędnego wraz z elementem nadrzędnym
  • przesunięcie lokalizacji dziecka za pomocą przesunięcia SubspaceModifier
  • prezentowanie obiektu 3D, który unosi się nad interfejsem 2D i pasuje do wysokości oraz szerokości odpowiedniej przestrzeni w układzie 2D;

Dodawanie podprzestrzeni do aplikacji

Poniższy przykład kodu pokazuje, jak dodać do aplikacji najwyższy poziom i zagnieżdżone podprzestrzenie.

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)
    }
      ...
}