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 komponencieSpatialPanel
, ten podprzestrzeń będzie podrzędna doSpatialPanel
, 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)
}
...
}