使用 ARCore for Jetpack XR 偵測平面

適用 XR 裝置
這份指南可協助您為這類 XR 裝置打造體驗。
XR 頭戴式裝置
有線 XR 眼鏡

Jetpack XR 適用的 ARCore 可偵測使用者環境中的平面,並提供相關資訊,例如姿勢、大小和方向。這有助於應用程式尋找可放置物件的平面,例如桌子。

存取工作階段

透過 ARCore for Jetpack XR Session 存取平面資訊。如果您使用適用於 XR 的 Jetpack Compose 強化空間 UI,請從適用於 XR 的 Jetpack Compose 存取工作階段。如果您要處理 Jetpack SceneCore 程式庫的空間實體,請從 Jetpack XR Runtime 存取工作階段

設定工作階段

根據預設,XR 工作階段不會啟用平面偵測功能。如要啟用平面追蹤功能,請設定工作階段並設定 PlaneTrackingMode.HORIZONTAL_AND_VERTICAL 模式:

val newConfig = session.config.copy(
    planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

擷取感知平面狀態

Jetpack XR 的 ARCore 會透過發出平面狀態的 StateFlow 提供平面狀態。在工作階段中訂閱平面後,應用程式會在平面新增、更新或移除時收到通知。

Plane.subscribe(session).collect { planes ->
    // Planes have changed; update plane rendering
}

平面具有下列屬性:

對平面執行命中測試

命中測試是一種計算射線與工作階段追蹤物件交集的方法。點擊測試的常見應用是將指標指向桌子,並在該位置放置物件。執行命中測試會產生命中物件清單。換句話說,命中測試不會在命中第一個物件時停止,不過,您通常可能只對特定類型的第一個物件命中感興趣。

如要執行命中測試,請搭配使用 Interaction.hitTest()Ray

val results = androidx.xr.arcore.hitTest(session, ray)
// When interested in the first Table hit:
val tableHit = results.firstOrNull {
    val trackable = it.trackable
    trackable is Plane && trackable.state.value.label == Plane.Label.TABLE
}