随着时间的推移重复进行射线广播查询,以将物理环境中更新的曲面通知您。
如何在arkit中使用此功能?
func trackedRaycast(_ query: ARRaycastQuery, updateHandler: @escaping ([ARRaycastResult]) -> Void) -> ARTrackedRaycast?
首先用类似的内容定义查询
let bounds = sceneView.bounds
let screenCenter = CGPoint(x: bounds.midX, y: bounds.midY)
let query = sceneView.raycastQuery(from: screenCenter, allowing: .estimatedPlane, alignment: .horizontal)
然后使用更新处理程序启动trackedRaycast:
let trackedRaycast = sceneView.castTrackedRay(for: query, updateHandler: { results in
guard let result = results.first else { return }
// Do something with results
// Maybe adjust a relevent node's position
someNode.simdWorldPosition = result.worldTransform.position
})
然后,如果在某些时候您不再需要跟踪/更新位置,则可以停止执行updateHandler
:trackedRaycast?.stopTracking()
[请注意,如果正常的射线广播由于查询约束或场景问题而失败,那么trackedRaycast也会失败,并且您的trackedRaycast
对象将为nil
。