空間機能を確認する

空間認識機能は、ユーザーがアプリやシステムを操作する際に変更される可能性があります。また、アプリ自体によって変更されることもあります(ホーム スペースやフル スペースへの移動など)。問題を回避するには、アプリで空間機能をチェックして、現在の環境でサポートされている API を特定する必要があります。

XR 向け Jetpack Compose を使用して空間機能を確認する

XR 用の Jetpack Compose は、空間機能をチェックするための Composition Local を作成します。空間 UI、空間オーディオ、環境、パススルー、3D コンテンツが有効になっているかどうかを確認できます。

LocalSpatialCapabilities.current を使用すると、現在次の空間機能が使用可能かどうかを確認できます。

  • isSpatialUiEnabled: アプリケーションが空間 UI 要素(SpatialPanel など)を作成できるかどうかを示します。
  • isContent3dEnabled: アプリが 3D オブジェクトを作成できるかどうかを示します。
  • isAppEnvironmentEnabled: アプリケーションが環境を設定できるかどうかを示します。
  • isPassthroughControlEnabled: アプリケーションがパススルー状態を制御できるかどうかを示します。
  • isSpatialAudioEnabled: アプリが空間オーディオを使用できるかどうかを示します。

次の例は、空間 UI が有効かどうかを確認する方法を示しています。

if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier
                .width(1488.dp)
                .fillMaxHeight()
        ) {
            AppContent()
        }
    }
} else {
    AppContent()
}

SceneCore を使用して空間機能を確認する

SceneCore ライブラリを使用する場合は、セッションを作成する必要があります。セッションが作成されたら、セッションで getSpatialCapabilities を呼び出して、現在使用可能な空間機能のクエリを実行します。

空間機能が変更されたときに通知するコールバック addSpatialCapabilitiesChangedListener をサブスクライブすることもできます。

val xrSession = Session.create(this)

// Example 1: check if enabling passthrough mode is allowed
if (xrSession.getSpatialCapabilities().hasCapability(
       SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL)) {
   xrSession.spatialEnvironment.setPassthroughOpacityPreference(0f)
}
// Example 2: Multiple capability flags can be checked simultaneously:
if (xrSession.getSpatialCapabilities().hasCapability(
       SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL and
               SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)) {
   // ...
}

// Example 3: Create a spatialized panel if/when spatialization UI becomes available
xrSession.addSpatialCapabilitiesChangedListener((capabilities) -> {
  if (capabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)){
Subspace{
   SpatialPanel(...)
      }
   }
});

関連ドキュメント