SceneCore エンティティ

対象となる XR デバイス
このガイダンスは、次のようなタイプの XR デバイス向けのエクスペリエンスを構築する際に役立ちます。
XR ヘッドセット
有線 XR グラス

SceneCoreEntity は、Jetpack SceneCore ライブラリと Compose for XR ライブラリをブリッジするサブスペース コンポーズ可能です。これにより、SceneCore でビルドされたエンティティを Compose レイアウトで使用できます。これにより、下位レベルのエンティティとカスタム コンポーネントを構築しながら、Compose でそれらのエンティティのサイズ設定、配置、親の変更、子の追加、修飾子の適用を行うことができます。

SceneCore エンティティを使用してレイアウトにエンティティを配置する

次の例は、SceneCore エンティティを使用してレイアウトにエンティティを配置する方法を示しています。

val virtualPixelDensity = session.scene.virtualPixelDensity

Subspace {
    SceneCoreEntity(
        modifier = SubspaceModifier.offset(x = 50.dp),
        factory = {
            SurfaceEntity.create(
                session = session,
                pose = Pose.Identity,
                stereoMode = SurfaceEntity.StereoMode.MONO
            )
        },
        update = { entity ->
            // Compose state changes may be applied to the SceneCore entity here.
            entity.stereoMode = SurfaceEntity.StereoMode.SIDE_BY_SIDE
        },
        sizeAdapter =
            object : SceneCoreEntitySizeAdapter<SurfaceEntity> {
                override fun onLayoutSizeChanged(
                    entity: SurfaceEntity,
                    size: IntVolumeSize
                ) {
                    val extents = FloatSize2d(
                        size.width.toFloat(),
                        size.height.toFloat()
                    )
                    entity.shape = SurfaceEntity.Shape.Quad(extents)
                }
            },
    ) {
        // Content here will be children of the SceneCoreEntity
        // in the scene graph.
    }
}

コードに関する主なポイント

  • ファクトリ ブロック: ファクトリ ブロックは、SceneCore から基盤となる SurfaceEntity エンティティを初期化する場所です。
  • 更新ブロック: 更新ブロックを使用して、Compose 状態の変化に応じてエンティティのプロパティを変更します。
  • サイズ適応: sizeAdapter は、エンティティのサイズを Compose レイアウト システムに返します。

その他の情報