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 Unterbereich wird nur gerendert, wenn die räumliche Darstellung aktiviert ist. Im Home Space oder auf Nicht-XR‑Geräten wird jeglicher Code in diesem Unterbereich ignoriert.
Sie können zusammensetzbare Unterbereichselemente 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 das entsprechende zusammensetzbare Unterbereichselement wie
SceneCoreEntity für 3D‑Modelle und SpatialExternalSurface für
Stereobilder. Einige XR‑Komponenten wie Orbiter oder SpatialDialog
sind standardmäßige zusammensetzbare 2D‑Elemente, die überall in Ihrer 2D‑UI-Hierarchie verwendet werden können.
Ein SubspaceComposable muss jedoch im Unterbereich Ihrer App aufgerufen werden. Verwenden Sie dazu das Subspace zusammensetzbare Unterbereichselement.
Unterbereichshierarchien
Der Subspace der obersten Ebene ist der äußerste Unterbereich, der von Ihrer App aufgerufen wird.
Bei jedem Aufruf eines Subspace wird eine neue, unabhängige räumliche UI-Hierarchie erstellt.
Die räumliche Position, Ausrichtung oder Skalierung eines übergeordneten Subspace, in dem er verschachtelt ist, wird nicht übernommen.
Verwenden Sie PlanarEmbeddedSubspace, um einen eingebetteten oder verschachtelten Subspace in einem SpatialPanel, Orbiter, SpatialPopup, oder einer anderen Komponente zu erstellen.
PlanarEmbeddedSubspace unterscheidet sich in zwei 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 übergeordneten 2D‑Layouts begrenzt werden.
- Sie verhalten sich wie untergeordnete Elemente der Entität, in der sie aufgerufen werden. Wenn Sie also ein zusammensetzbares Unterbereichselement aufrufen, das in einem
SpatialPanelverschachtelt ist, ist dieser Unterbereich ein untergeordnetes Element desSpatialPanel, in dem er aufgerufen wird.
Diese Verhaltensweisen von PlanarEmbeddedSubspace ermöglichen folgende Funktionen:
- Untergeordnete Elemente mit der übergeordneten Entität verschieben
- Den Standort des untergeordneten Elements mit dem Offset
SubspaceModifierverschieben - Ein 3D‑Objekt präsentieren, das über der 2D‑UI schwebt und dessen Höhe und Breite dem entsprechenden Bereich im 2D‑Layout entspricht
Layouts für einen Unterbereich anpassen
Unter Android XR ist das Layout Ihrer App standardmäßig an die VolumeConstraints von
Subspace im Full Space Mode gebunden. Daher sollten Sie den für den Nutzer sichtbaren Bereich berücksichtigen und Ihr Layout entsprechend anpassen. Mit recommendedContentBoxInFullSpace werden die
spezifischen Abmessungen für den Begrenzungsrahmen im ActivitySpace angegeben, damit Inhalte im Sichtfeld des Nutzers platziert werden können.
Die primären Inhalte Ihrer App sollten in dieses Feld passen. Wenn Sie Inhalte haben, die die empfohlenen Grenzen überschreiten müssen, sollten Sie ein Layout verwenden, das Nutzer dazu anregt, den Raum zu erkunden, indem sie den Kopf bewegen. Die Standardeinschränkung von
recommendedContentBoxInFullSpace kann überschrieben werden, indem Sie einen
benutzerdefinierten größenbasierten Modifikator wie SubspaceModifier.requiredSizeIn anwenden. Legen Sie für ein unbegrenztes Verhalten allowUnboundedSubspace = true fest.
Rufen Sie recommendedContentBoxInFullSpace mit der aktuellen Sitzung auf, um
diese spezifischen Abmessungen nach Bedarf abzurufen. Siehe folgendes Beispiel:
val session = LocalSession.current session?.scene?.activitySpace?.recommendedContentBoxInFullSpace
Einer App einen Unterbereich hinzufügen
Das folgende Codebeispiel zeigt, wie Sie Ihrer App Subspace und
PlanarEmbeddedSubspace hinzufü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.