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