valnewConfig=session.config.copy(planeTracking=Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL,)when(valresult=session.configure(newConfig)){isSessionConfigureConfigurationNotSupported->
TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)isSessionConfigureSuccess->TODO(/* Success! */)else->
TODO(/* A different unhandled exception was thrown. */)}
히트 테스트는 광선과 세션에서 추적하는 객체의 교차점을 계산하는 방법입니다. 히트 테스트의 일반적인 적용 사례는 테이블을 가리키고 해당 위치에 객체를 배치하는 것입니다. 히트 테스트를 실행하면 히트 객체 목록이 생성됩니다. 즉, 히트 테스트는 첫 번째 객체 히트에서 중지되지 않습니다. 하지만 특정 유형의 첫 번째 객체 조회만 필요한 경우가 많습니다.
valresults=androidx.xr.arcore.hitTest(session,ray)// When interested in the first Table hit:valtableHit=results.firstOrNull{valtrackable=it.trackabletrackableisPlane && trackable.state.value.label==Plane.Label.TABLE}
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-08-28(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-08-28(UTC)"],[],[],null,["ARCore for Jetpack XR can detect flat surfaces in the user's environment and\nprovide information on them such as their pose, size, and orientation. This can\nhelp your app find surfaces like tables to place objects on.\n\nCreate an ARCore for Jetpack XR session\n\nAccess plane information through an ARCore for Jetpack XR session. See\n[Understand a Session's lifecycle](/develop/xr/jetpack-xr-sdk/work-with-arcore#session-lifecycle) to obtain a [`Session`](/reference/kotlin/androidx/xr/runtime/Session).\n\nConfigure the Session\n\nPlane detection is not enabled by default on XR sessions. To enable plane\ntracking, configure the session and set the\n[`PlaneTrackingMode.HORIZONTAL_AND_VERTICAL`](/reference/kotlin/androidx/xr/runtime/Config.PlaneTrackingMode#HORIZONTAL_AND_VERTICAL()) mode:\n\n\n```kotlin\nval newConfig = session.config.copy(\n planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL,\n)\nwhen (val result = session.configure(newConfig)) {\n is SessionConfigureConfigurationNotSupported -\u003e\n TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)\n is SessionConfigureSuccess -\u003e TODO(/* Success! */)\n else -\u003e\n TODO(/* A different unhandled exception was thrown. */)\n}https://github.com/android/snippets/blob/5673ffc60b614daf028ee936227128eb8c4f9781/xr/src/main/java/com/example/xr/arcore/Planes.kt#L30-L39\n```\n\n\u003cbr /\u003e\n\n| **Note:** Plane tracking requires the `android.permission.SCENE_UNDERSTANDING_COARSE` [runtime permission](/training/permissions/requesting) to be granted to your app.\n\nRetrieve the state of perceived planes\n\nARCore for Jetpack XR provides the state of planes through a\n[`StateFlow`](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-state-flow/) that emits the state of planes. Subscribing to\nplanes in a session notifies your app when planes are added, updated, or\nremoved.\n\n\n```kotlin\nPlane.subscribe(session).collect { planes -\u003e\n // Planes have changed; update plane rendering\n}https://github.com/android/snippets/blob/5673ffc60b614daf028ee936227128eb8c4f9781/xr/src/main/java/com/example/xr/arcore/Planes.kt#L45-L47\n```\n\n\u003cbr /\u003e\n\nA plane has the following properties:\n\n- [`label`](/reference/kotlin/androidx/xr/arcore/Plane.State#label()): a semantic description of a given [`Plane`](/reference/kotlin/androidx/xr/arcore/Plane). Could be a [`WALL`](/reference/kotlin/androidx/xr/arcore/Plane.Label#WALL()), [`FLOOR`](/reference/kotlin/androidx/xr/arcore/Plane.Label#FLOOR()), [`CEILING`](/reference/kotlin/androidx/xr/arcore/Plane.Label#CEILING()), or [`TABLE`](/reference/kotlin/androidx/xr/arcore/Plane.Label#TABLE()).\n- [`centerPose`](/reference/kotlin/androidx/xr/arcore/Plane.State#centerPose()): The pose of the center of the detected plane.\n- [`extents`](/reference/kotlin/androidx/xr/arcore/Plane.State#extents()): The dimensions of the detected plane, in meters.\n- [`vertices`](/reference/kotlin/androidx/xr/arcore/Plane.State#vertices()): A list of vertices of a convex polygon that approximates the plane.\n\nPerform a hit-test against planes\n\nA hit-test is a method of calculating the intersection of a ray with objects\ntracked by the session. A common application of a hit-test is to point at a\ntable and place an object at that location. Conducting a hit-test results in a\nlist of hit objects. In other words, a hit-test doesn't stop at the first object\nhit. However, often you may only be interested in the first object hit of a\ngiven type.\n\nTo perform a hit-test, use [`Interaction.hitTest()`](/reference/kotlin/androidx/xr/arcore/package-summary#hittest) with a [`Ray`](/reference/kotlin/androidx/xr/runtime/math/Ray):\n\n\n```kotlin\nval results = androidx.xr.arcore.hitTest(session, ray)\n// When interested in the first Table hit:\nval tableHit = results.firstOrNull {\n val trackable = it.trackable\n trackable is Plane && trackable.state.value.label == Plane.Label.TABLE\n}https://github.com/android/snippets/blob/5673ffc60b614daf028ee936227128eb8c4f9781/xr/src/main/java/com/example/xr/arcore/Planes.kt#L55-L60\n```\n\n\u003cbr /\u003e"]]