iOS ARView.hitTest 限制为最大 100 米

iOS ARView.hitTest limited to a max of 100 meters

我发现ARView.hitTest限制在100米距离内。 所有距离超过 100m 的物体,无论大小,都不会被识别。

有什么方法可以解封吗?

let hitTest = arView.hitTest(point, query: .any, mask: .all)

没错,hitTest(_:query:mask:)实例方法目前的距离限制是100米。但是你可以实现方法 raycast(from:to:) 允许你从任何场景点向任何方向发射光线,即使距离是 1000 米。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    let cameraPosition = arView.cameraTransform.translation
    
    let castHits = arView.scene.raycast(from: cameraPosition, to: [0, 0,-1000])
    
    guard let hitTest: CollisionCastHit = castHits.first else { return }
    
    print(hitTest.distance)
}


更新:

此外,正如@Sacha 所建议的,我们可以使用实例方法ray(through:) 来确定通过 2D space 视图中给定点的光线的位置和方向。它 returns 可选元组 (origin: SIMD3<Float>, direction: SIMD3<Float>)? 适合 raycast(from:to:) 方法的参数。