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órych można używać w dowolnym miejscu w hierarchii interfejsu 2D, ale które muszą być wywoływane w podprzestrzeni aplikacji.SubspaceComposable
Aby to zrobić, użyj komponentu ApplicationSubspace
lub Subspace
.
Jak sama nazwa wskazuje, kompozyt ApplicationSubspace
powinien zawierać wszystkie treści z Twojej aplikacji z dźwiękiem przestrzennym. Komponent Subspace
jest idealny do zagnieżdżania partycji przestrzeni 3D w dotychczasowej hierarchii interfejsu aplikacji.
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
Subprzestrzeń najwyższego poziomu to najbardziej zewnętrzna subprzestrzeń wywoływana przez aplikację. Do subprzestrzeni najwyższego poziomu użyj kompozytu ApplicationSubspace
, ale jeśli w swojej aplikacji używasz tylko kompozytu Subprzestrzeń, najbardziej zewnętrzny kompozyt Subspace
będzie stanowił subprzestrzeń najwyższego poziomu. Domyślnie ta przestrzeń najwyższego poziomu jest ograniczona przez zalecaną przestrzeń do wyświetlania aplikacji. To właśnie tam zwykle umieszczasz układ przestrzenny aplikacji i SpatialPanel
. Jeśli chcesz zmienić granice przestrzeni podrzędnej najwyższego poziomu, prześlij inne dane [VolumeConstraints
][VolumeConstraints] do ApplicationSubspace
.
Jeśli jednak umieścisz w hierarchii interfejsu 2D w panelu, który jest zawarty w przestrzeni podrzędnej najwyższego poziomu, ta zawarta przestrzeń podrzędna będzie się zachowywać inaczej.
Zagnieżdżone podprzestrzenie różnią się od najwyższego poziomu Subspace
2 głównymi cechami:
- 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 ostatni jest elementem podrzędnym komponentuSpatialPanel
, w którym jest wywoływany.
Te zachowania zagnieżdżonego podprzestrzeni umożliwiają takie funkcje jak:
- przeniesienie podrzędnej z poziomu jednostki nadrzędnej;
- 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) } }