Ihrer App einen Unterbereich hinzufügen

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
XR‑Headsets
Kabelgebundene XR‑Brillen

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 SpatialPanel verschachtelt ist, ist dieser Unterbereich ein untergeordnetes Element des SpatialPanel , 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 SubspaceModifier verschieben
  • 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.