AR 内容必须正确放置和大小,才能融入场景。与现实世界中的物体一样,距离较远的虚拟物体应看起来更小。您可以执行命中测试(或在 AR Foundation for Unity 中执行光线投射),确定 3D 对象在场景中的正确位置。正确的放置可确保 AR 内容以适当的(表观)尺寸呈现。
点击测试可以找到真实的 3D 几何图形与由原点和方向组成的虚拟光线之间的交集。使用设备摄像头作为原点的射线最常用的方法是,不过 ARCore 包含一个 API,用于执行在世界空间坐标中使用任意射线的命中测试。
假设有一条光线,来源于用户设备相机,它向前延伸,直至射中场景的 3D 几何图形(例如地面、墙壁或物体)。一旦发生这种情况,您会收到命中结果列表,或与检测到的场景几何图形的交集。该列表会按设备与设备的距离进行排序,最近的交叉路口排在最前面。这一点很重要,因为通常情况下,您看不到被其他对象遮挡的对象,因此在大多数情况下,第一个结果最为重要。
[null,null,["最后更新时间 (UTC):2025-07-26。"],[[["\u003cp\u003eARCore hit-tests, or raycasts, help you determine the correct placement and scale of virtual objects in the real world by finding intersections between a ray and the scene's geometry.\u003c/p\u003e\n"],["\u003cp\u003eHit results provide distance, pose, and trackable information, allowing you to realistically anchor 3D content.\u003c/p\u003e\n"],["\u003cp\u003eThere are four hit result types: Depth, Plane, Feature Point, and Instant Placement, each with different use cases and tradeoffs depending on the desired outcome and device capabilities.\u003c/p\u003e\n"],["\u003cp\u003eDepth hit results, available on Depth supported devices, utilize depth information for precise object placement on any surface, while Plane hit results are suitable for floors and walls.\u003c/p\u003e\n"],["\u003cp\u003eFeature Point hit results rely on visual features, and Instant Placement allows for fast content placement even with initially unknown depth and scale.\u003c/p\u003e\n"]]],[],null,["# Hit-tests place virtual objects in the real world\n\n**Platform-specific guides** \n\n### Android (Kotlin/Java)\n\n- [Developer guide](/ar/develop/java/hit-test/developer-guide)\n\n### Android NDK (C)\n\n- [Developer guide](/ar/develop/c/hit-test/developer-guide)\n\n### Unity (AR Foundation)\n\n- [Developer guide](/ar/develop/unity-arf/hit-test/developer-guide)\n\nYour browser does not support the video tag.\n\nAR content must be correctly placed and sized to blend into a scene. Like real-world objects, virtual objects that are further away should appear smaller. You can perform a **hit-test** (or a **raycast** in AR Foundation for Unity) to determine the correct placement of a 3D object in your scene. Correct placement ensures that the AR content is rendered at the appropriate (apparent) size.\n\nHit-tests find intersections between either real-world 3D geometry and a virtual ray consisting of an origin and direction. Rays with the device's camera as the origin are used most commonly, though ARCore includes an API for performing hit-tests with an arbitrary ray in world space coordinates.\n\nImagine that there is a ray originating from a user's device camera that extends forward until it hits the 3D geometry of the scene, such as a floor, wall, or object. Once this happens, you receive a list of **hit results**, or intersections with detected scene geometry. The list is sorted by distance from the device, with the nearest intersection first. This is important because generally you can't see objects occluded behind other objects, so most of the time the first result is the most significant.\n| **Note:** Hit-tests are typically performed as rays from the device or device camera, but it is possible to have an arbitrary ray origin and direction.\n\nContents of a hit result\n------------------------\n\nAn individual hit result is returned as a list with the following information for each result:\n\n- Distance from the ray origin, in meters\n- Pose (position and orientation) of the hit result\n- The 3D geometry that you hit, in the form of a Trackable\n\nYou can then use the desired hit result to [realistically place your 3D content using an Anchor](/ar/develop/anchors).\n\nHit result types\n----------------\n\nThere are four types of hit results: Depth, plane, feature point, and Instant Placement results. Each has its own use cases and tradeoffs, as shown by the following table.\n| **Note:** Depth hit results require [Depth supported devices](/ar/devices#google_play_devices). On non-Depth supported devices, Depth supported devices that do not have depth data yet or on sessions where Depth has been disabled, use plane hit results instead.\n\n| Hit result type | Description | Orientation | Use case |\n|----------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Depth | Uses depth information from the entire scene to determine a point's correct depth and orientation | Perpendicular to the 3D surface | Place a virtual object on an arbitrary surface (not just on floors and walls) |\n| Plane | Hits horizontal and/or vertical surfaces to determine a point's correct depth and orientation | Perpendicular to the 3D surface | Place an object on a plane (floor or wall) using the plane's full geometry. Need correct scale immediately. Fallback for the Depth hit-test |\n| Feature point | Relies on visual features around the point of a user tap to determine a point's correct position and orientation | Perpendicular to the 3D surface | Place an object on an arbitrary surface (not just on floors and walls) |\n| Instant Placement (Persistent Raycast) | Uses screen space to place content. Initially uses estimated depth provided by the app. Works instantly, but pose and actual depth will change once ARCore is able to determine actual scene geometry | +Y pointing up, opposite to gravity | Place an object on a plane (floor or wall) using the plane's full geometry where fast placement is critical, and the experience can tolerate unknown initial depth and scale |\n\nDevice compatibility\n--------------------\n\nHit-tests work on all [ARCore supported devices](/ar/devices), but Depth hit-tests will require [Depth supported devices](/ar/devices#google_play_devices).\n\nUse hit results to place AR content\n-----------------------------------\n\nOnce you have a hit result, you can use its pose as input to [place AR content](/ar/develop/anchors) in your scene."]]