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. 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 komponencie SpatialPanel, ten ostatni jest elementem podrzędnym komponentu SpatialPanel, 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)
    }
}