为什么我们必须使用hitTestResult.first
,尽管我们可以在屏幕上轻击几次,然后每次点击都以hitTestResult.last
的形式写入数组?
@objc func tapped(gesture: UITapGestureRecognizer) {
let touchPosition: CGPoint = gesture.location(in: sceneView)
let hitTestResult: [ARHitTestResult] = sceneView.hitTest(touchPosition, types: .existingPlaneUsingExtent)
if !hitTestResult.isEmpty {
guard let hitResult = hitTestResult.first else {
return
}
addGrass(hitTestResult: hitResult)
}
}
}
答案 0 :(得分:1)
轻击几次根本不会影响hitTest
的结果。如果用户在同一位置用1个对象轻击100次,您仍然只能通过hitTest
方法获得1个对象。
根据发现的文档here,将要返回的对象是“从最近到最远(与相机的距离)排序的”。
因此,为了更基本地理解事物,您可能在任何给定时间在屏幕上拥有任意数量的对象。并且在任何时候您都可以使用hitTest
,通过给定touchPosition
,您可以在定义的视图部分中看到当时所有可见的对象。由于在同一视图位置中可能有多个项目,因此这些项目将在数组中进行检索,并对其进行排序,从而使看起来更靠近您的项目位于数组的开头。
因此,将first
更改为last
仅意味着宁愿使用背面的对象,也不使用正面的对象。