하위 스페이스는 앱 내 3D 공간의 파티션으로, 여기서 3D 모델을 배치하고, 3D 레이아웃을 빌드하고, 2D 콘텐츠에 깊이를 추가할 수 있습니다. 하위 공간은 공간화가 사용 설정된 경우에만 렌더링됩니다. Home Space 또는 XR이 아닌 기기에서는 해당 하위 공간 내의 모든 코드가 무시됩니다.
3D 모델을 배치하는 데 Volume
및 SpatialPanel
와 같은 @SubspaceComposable
를 사용할 수 있습니다. Orbiter
또는 SpatialDialog
와 같은 일부 XR 구성요소는 2D UI 계층 구조의 어디서나 사용할 수 있는 표준 2D 컴포저블이지만 SubspaceComposable
는 앱의 하위 공간에서 호출해야 합니다. 이를 위해 Subspace
컴포저블을 사용합니다.
다른 구성 가능한 함수와 마찬가지로 2D UI 계층 구조에서 직접 Subspace
를 호출할 수 있습니다. 그러나 계층 구조에서 Subspace
를 호출하는 위치의 의미를 이해하는 것이 중요합니다.
하위 공간 계층 구조 정보
최상위 하위 공간은 앱에서 호출하는 가장 바깥쪽 하위 공간입니다. 이 하위 공간은 사실상 무한한 경계를 가지며 일반적으로 앱의 공간 레이아웃과 SpatialPanel
를 배치하는 위치입니다.
그러나 최상위 하위 스페이스에 포함된 패널의 2D UI 계층 구조 내에 다른 하위 스페이스를 중첩하면 중첩된 하위 스페이스가 다르게 동작합니다.
중첩된 하위 공간은 최상위 Subspace
과 두 가지 주요 차이점이 있습니다.
- 호출된 2D 레이아웃에 참여합니다. 즉, 하위 공간의 높이와 너비는 2D 상위 레이아웃의 높이와 너비에 의해 제한됩니다.
- 호출된 위치에서 항목의 하위 요소로 작동합니다. 즉,
SpatialPanel
내에 중첩된Subspace
컴포저블을 호출하면 이 하위 공간은 호출된SpatialPanel
의 하위 요소가 됩니다.
중첩된 하위 공간의 이러한 동작은 다음과 같은 기능을 사용 설정합니다.
- 상위 항목과 함께 하위 항목 이동
- 오프셋
SubspaceModifier
을 사용하여 하위 요소의 위치 오프셋 - 2D UI 위에 마우스를 가져가면 표시되고 2D 레이아웃에서 적절한 공간의 높이와 너비와 일치하는 3D 객체를 표시합니다.
앱에 하위 공간 추가
다음 코드 예는 앱에 최상위 및 중첩된 하위 공간을 추가하는 방법을 보여줍니다.
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)
}
...
}