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. Subprzestrzeń jest renderowana 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ć komponentów podprzestrzeni, takich jak Volume
i SpatialPanel
. Niektóre komponenty XR, takie jak Orbiter
lub SpatialDialog
, to standardowe komponenty 2D, które można stosować w dowolnym miejscu w hierarchii interfejsu 2D. Jednak komponenty SubspaceComposable
muszą być wywoływane w subprzestrzeni aplikacji. Aby to zrobić, użyj usługi ApplicationSubspace
lub usługi Subspace
.
Jak wskazuje nazwa, komponent ApplicationSubspace
powinien zawierać wszystkie zlokalizowane przestrzennie treści z aplikacji. Komponent Subspace
jest idealny do zagnieżdżania partycji przestrzeni 3D głębiej w dotychczasowej hierarchii UI aplikacji.
Podobnie jak w przypadku innych komponentów, możesz wywołać komponent Subspace
bezpośrednio w hierarchii interfejsu 2D. Należy jednak pamiętać o konsekwencjach wywołania Subspace
w danym miejscu w hierarchii.
Hierarchie podprzestrzeni
Subspace najwyższego poziomu to najbardziej zewnętrzny subspace wywoływany przez aplikację. Do subspace najwyższego poziomu użyj komponentu ApplicationSubspace
, ale jeśli w aplikacji używasz tylko komponentu Subspace, najbardziej zewnętrznym Subspace
komponentem będzie subspace najwyższego poziomu. Domyślnie ten najwyższy poziom podprzestrzeni jest ograniczony przez zalecaną przestrzeń do wyświetlania aplikacji. Zazwyczaj jest to miejsce, w którym umieszczasz układ przestrzenny aplikacji i SpatialPanel
. Jeśli chcesz zmienić granice podprzestrzeni najwyższego poziomu, prześlij inny parametr VolumeConstraints
do funkcji ApplicationSubspace
.
Jeśli jednak umieścisz w hierarchii interfejsu 2D w panelu, który jest zawarty w przestrzeni podrzędnej najwyższego poziomu, ta przestrzeń podrzędna 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-owego 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ń jest podrzędna doSpatialPanel
, w którym jest wywoływany.
Te zachowania zagnieżdżonego podprzestrzeni umożliwiają takie funkcje jak:
- przeniesienie podrzędnej jednostki wraz z jednostką nadrzędną.
- 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ładowy kod pokazuje, jak dodać do aplikacji najwyższy poziom i zagnieżdżone podprzestrzenie:
setContent { // This is a top-level subspace ApplicationSubspace { 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(true) } }