Ein Unterbereich ist eine Partition des 3D-Raums in Ihrer App, in der Sie 3D-Modelle platzieren, 3D-Layouts erstellen und 2D-Inhalten Tiefe verleihen können. Ein Subspace wird nur gerendert, wenn die Räumlichkeit aktiviert ist. Im Home Space oder auf Nicht-XR-Geräten wird jeglicher Code in diesem Unterbereich ignoriert.
Sie können Subspace-Composables wie SpatialPanel, SpatialRow und SpatialColumn verwenden, um Ihr Layout zu erstellen und 2D-Inhalte im 3D-Raum zu platzieren. Verwenden Sie zum Platzieren von 3D-Inhalten die entsprechende Subspace-Composable, z. B. SceneCoreEntity für 3D-Modelle und SpatialExternalSurface für Stereobilder. Einige XR-Komponenten wie Orbiter oder SpatialDialog sind standardmäßige 2D-Composables, die überall in der 2D-UI-Hierarchie verwendet werden können. Ein SubspaceComposable muss jedoch im Unterraum Ihrer App aufgerufen werden. Verwenden Sie dazu die zusammensetzbare Funktion Subspace.
Unterraumhierarchien
Die oberste Ebene Subspace ist der äußerste Unterbereich, der von Ihrer App aufgerufen wird.
Bei jedem Aufruf von Subspace wird eine neue, unabhängige räumliche UI-Hierarchie erstellt.
Sie übernimmt nicht die räumliche Position, Ausrichtung oder Skalierung eines übergeordneten Subspace, in das sie eingebettet ist.
Wenn Sie ein eingebettetes oder verschachteltes Subspace in einem SpatialPanel, Orbiter, SpatialPopup oder einer anderen Komponente erstellen möchten, verwenden Sie PlanarEmbeddedSubspace.
PlanarEmbeddedSubspace unterscheidet sich in zwei wesentlichen Punkten von Subspace:
- Sie sind Teil des 2D-Layouts, in dem sie aufgerufen werden. Das bedeutet, dass die Höhe und Breite des Unterbereichs durch die Höhe und Breite des zugehörigen 2D-Layouts begrenzt werden.
- Sie verhalten sich wie untergeordnete Elemente der Entität, in der sie aufgerufen werden. Wenn Sie einen untergeordneten Subspace aufrufen, der in einem
SpatialPanelverschachtelt ist, ist dieser Subspace ein untergeordnetes Element desSpatialPanel, in dem er aufgerufen wird.
Diese Verhaltensweisen von PlanarEmbeddedSubspace ermöglichen Funktionen wie:
- Kind mit der übergeordneten Einheit verschieben
- Standort des Kindes mit dem Offset
SubspaceModifierverschieben - Ein 3D-Objekt, das über der 2D-Benutzeroberfläche schwebt und der Höhe und Breite des entsprechenden Bereichs im 2D-Layout entspricht
Layouts für einen untergeordneten Space anpassen
Unter Android XR ist das Layout Ihrer App im Full Space-Modus standardmäßig an die VolumeConstraints von Subspace gebunden. Berücksichtigen Sie daher den für den Nutzer sichtbaren Bereich und passen Sie das Layout entsprechend an. Die recommendedContentBoxInFullSpace enthält die spezifischen Abmessungen für den Begrenzungsrahmen innerhalb der ActivitySpace, damit Inhalte im Sichtfeld des Nutzers platziert werden können.
Der primäre Inhalt Ihrer App sollte in dieses Feld passen. Wenn Sie Inhalte haben, die die empfohlenen Grenzen überschreiten müssen, sollten Sie ein Layout in Betracht ziehen, das Nutzer dazu anregt, den Raum durch Kopfbewegungen zu erkunden. Die Standardeinschränkung von recommendedContentBoxInFullSpace kann durch Anwenden eines benutzerdefinierten größenbasierten Modifikators wie SubspaceModifier.requiredSizeIn überschrieben werden. Legen Sie für ein unbegrenztes Verhalten allowUnboundedSubspace = true fest.
Rufen Sie recommendedContentBoxInFullSpace mit der aktuellen Session auf, um diese spezifischen Dimensionen nach Bedarf abzurufen. Sehen Sie sich folgendes Beispiel an:
val session = LocalSession.current session?.scene?.activitySpace?.recommendedContentBoxInFullSpace
Unterbereich zu Ihrer App hinzufügen
Das folgende Codebeispiel zeigt, wie Sie Subspace und PlanarEmbeddedSubspace in Ihre App einfügen:
setContent { // This is a top-level subspace Subspace { SpatialPanel { MyComposable() } } }
@Composable private fun MyComposable() { Row { PrimaryPane() SecondaryPane() } } @Composable private fun PrimaryPane() { // This is an embedded subspace, because PrimaryPane is in a SpatialPanel // and that SpatialPanel is in the top-level Subspace PlanarEmbeddedSubspace { SpatialPanel {} } }
Weitere Informationen finden Sie in der vollständigen Referenzdokumentation zu Subspace und PlanarEmbeddedSubspace.