在應用程式中新增子區

子空間是應用程式中 3D 空間的區隔,可用於放置 3D 模型、建構 3D 版面配置,以及為 2D 內容新增深度。只有在啟用空間化功能時,系統才會算繪子空間。在 Home Space 或非 XR 裝置上,系統會忽略該子空間中的任何程式碼。

您可以使用 @SubspaceComposable (例如 VolumeSpatialPanel) 來放置 3D 模型。部分 XR 元件 (例如 OrbiterSpatialDialog) 是標準的 2D 可組合項,可用於 2D UI 階層中的任何位置,但 SubspaceComposable 必須在應用程式的子區域中叫用。為此,您將使用 Subspace 可組合函式。

如同其他可組合項,您可以在 2D UI 階層中直接呼叫 Subspace。不過,請務必瞭解在階層中叫用 Subspace 的影響。

關於子空間階層

頂層子空間是應用程式叫用的最外層子空間。這個子空間實際上具有無限邊界,通常是放置應用程式空間版面配置和 SpatialPanel 的位置。

不過,如果您在頂層子區域中包含的面板中,在 2D UI 階層中巢狀結構另一個子區域,該巢狀結構子區域的行為會有所不同。

巢狀子空間與頂層 Subspace 有兩個主要差異:

  • 這些物件會參與其叫用的 2D 版面配置。這表示子區域的高度和寬度會受到其 2D 父項版面配置的高度和寬度限制。
  • 這些元素的行為就像是其叫用所在實體的子項。也就是說,如果您呼叫巢狀在 SpatialPanel 中的 Subspace 可組合函式,該子空間將會是呼叫所在 SpatialPanel 的子項。

巢狀子空間的這些行為可啟用以下功能:

  • 使用父項實體移動子項
  • 使用偏移量 SubspaceModifier 偏移子項的位置
  • 呈現 3D 物件,讓其懸停在 2D UI 上方,並與 2D 版面配置中適當空間的高度和寬度相符

在應用程式中新增子區

以下程式碼範例說明如何在應用程式中新增頂層和巢狀子集。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    setContent {
        // This is a top-level subspace
        Subspace {
            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(show3DObject)
    }
      ...
}