SubspaceModifier는 Subspace의 컴포저블을 위한 Compose 수정자와 유사합니다. SubspaceModifier를 사용하면 3D 공간에서 컴포저블을 조작하여 3D 레이아웃 노드를 배치, 회전하고 동작을 추가할 수 있습니다.
레이아웃
기본적으로 Subspace은 앱을 보는 데 권장되는 공간으로 제한됩니다. 이러한 경계는 2D Compose 레이아웃의 경계와 마찬가지로 하위 공간 구성요소의 레이아웃을 측정할 때 사용됩니다.
경계 채우기
fillMaxSize, fillMaxWidth, fillMaxHeight, fillMaxDepth 수정자는 콘텐츠가 상위 요소의 경계를 (부분적으로) 채우도록 합니다.
채우기 수정자를 사용하면 앱에서 XR 기기의 디스플레이 특성과 관계없이 콘텐츠를 배치할 수 있습니다.
크기 및 필수 크기 설정
수정자 size, width, height, depth는 콘텐츠의 기본 크기를 선언합니다. 콘텐츠의 정확한 크기를 선언하려면 requiredSize, requiredWidth, requiredHeight, requiredDepth를 사용합니다. 이러한 단위는 dp로 지정해야 합니다. 미터를 dp로 변환하려면 Meter.toDp()를 사용하세요.
컴포저블 배치
offset
offset 수정자는 3D 공간에서 x, y, z 축을 따라 컴포저블을 이동합니다. 이러한 단위는 dp로 지정해야 합니다. 미터를 dp로 변환하려면 Meter.toDp()를 사용하세요.
rotate
rotate 수정자는 공간에서 지정된 컴포저블을 회전합니다. 다음과 같은 다양한 방법으로 회전 방향과 양을 지정할 수 있습니다.
- 각각
x,y,z축을 중심으로 회전을 지정하는 피치, 요, 롤을 사용합니다. - 회전축을 나타내는
Vector3인axisAngle와 회전할 각도를 사용하여 - 회전을 나타내는
Quaternion를 사용합니다.
rotateToLookAtUser
rotateToLookAtUser 수정자는 콘텐츠를 지속적으로 회전하여 항상 사용자를 향하도록 합니다. 이 수정자를 사용하여 콘텐츠가 Y축에서 사용자를 향하도록 회전하면서도 똑바로 서 있고 중력과 정렬되는 '빌보드' 효과를 얻을 수도 있습니다. 이렇게 하려면 rotateToLookAtUser 수정자를 gravityAligned 수정자와 결합합니다.
컴포저블 이동 및 크기 조절
사용자가 3D 공간에서 객체의 위치와 크기를 직접 조작할 수 있도록 합니다.
요소 이동
movable 수정자가 있고 사용 설정된 경우 사용자가 3D 공간에서 요소를 이동할 수 있는 드래그 가능한 UI 컨트롤이 표시됩니다. movable 수정자를 전체 Subspace, 공간 레이아웃 구성요소 (예: SpatialRow 및 SpatialColumn), 개별 구성요소 (예: SpatialPanel 및 SpatialGltfModel)에 적용할 수 있습니다.
이 이동의 구체적인 동작은 제공된 movePolicy에 의해 정의됩니다.
MovePolicy.Default(또는MovePolicy.system()): 시스템이 이동을 완전히 처리하고 사용자 입력을 기반으로 새 포즈와 배율을 자동으로 계산하고 적용합니다.MovePolicy.custom(): 시스템은 입력을 기반으로 타겟Pose를 계산하지만 연결된 요소에 자동으로 적용하지는 않습니다. 이는 앱에서 움직임을 제한하거나 맞춤 움직임을 만드는 데 유용합니다.MovePolicy.anchor(): 사용자가 이동 가능한 요소를 감지된 실제 평면에 맞추고 고정할 수 있습니다.
앵커 컴포저블
이동 가능한 하위 공간 컴포저블을 실제 표면에 고정하려면 MovePolicy.anchor()를 movable 수정자에 전달합니다.
이 정책을 사용하면 사용자가 요소 (예: SpatialPanel 및 SpatialGltfModel)를 테이블, 벽, 바닥과 같은 실제 표면에 맞출 수 있습니다.
다음 매개변수를 사용하여 요소가 스냅할 수 있는 감지된 평면을 필터링할 수 있습니다 (비워 두면 요소가 감지된 모든 평면에 고정될 수 있음).
anchorPlaneOrientations:PlaneOrientation값 집합 (Horizontal,Vertical또는Any)입니다.anchorPlaneSemantics:PlaneSemantic값 집합(Wall,Floor,Ceiling,Table또는Any)
요소 크기 조절
resizable() 수정자가 있고 사용 설정된 경우 사용자가 3D 공간에서 요소의 크기를 조절할 수 있는 UI 컨트롤이 표시됩니다. 크기 조절의 구체적인 동작은 제공된 resizePolicy에 의해 정의됩니다.
ResizePolicy.default(): 시스템이 크기 조절 동작을 자동으로 처리하고 콘텐츠에 새 크기를 적용합니다.ResizePolicy.custom(): 시스템은SpatialResizeEvent를 제공하며 크기 조절 결과를 연결된 요소에 자동으로 적용하지 않습니다.
컴포저블의 모양 변경
alpha
alpha 수정자는 요소와 하위 요소의 불투명도를 설정합니다. 여기서 0f는 완전히 투명함을 나타내고 1.0f는 완전히 불투명함을 나타냅니다.
scale
scale 수정자는 가로, 세로, 깊이 축을 따라 컴포저블의 콘텐츠를 확장합니다.
테스트 및 접근성
semantics
semantics 수정자는 테스트 및 접근성에 사용할 수 있도록 레이아웃 노드에 시맨틱을 추가합니다. Jetpack Compose의 시맨틱 및 SemanticsModifier을 참고하세요.
testTag
testTag 수정자는 SemanticsPropertyReceiver.testTag의 약칭으로, 테스트 프레임워크가 테스트에서 요소를 찾을 수 있도록 합니다.