ARKit–使用raycastQuery而不是hitTest来点击节点,后者已被弃用
在 iOS 14 中,hitTest(_:types:)已弃用。看来你现在应该使用raycastQuery(from:allowing:alignment:)了。从文档:
光线投射是在现实世界环境中寻找表面位置的首选方法,但为了兼容性,命中测试功能仍然存在。通过跟踪光线投射,ARKit 会继续优化结果,以提高您使用光线投射放置的虚拟内容的位置精度。
但是,如何SCNNode使用光线投射命中 test ?我只看到测试飞机的选项。
raycastQuery 方法文档 |
唯一的选择allowing:是飞机 |
|---|---|
回答
关于命中测试
官方文档说只有 ARKit 的hitTest(_:types:)实例方法在 iOS 15 中被弃用。在 iOS 14 中你仍然可以使用它。ARKit 的命中测试方法应该被替换为光线投射方法。
弃用的命中测试:
let results: [ARHitTestResult] = sceneView.hitTest(sceneView.center,
types: .existingPlaneUsingGeometry)
光线投射等效:
let raycastQuery: ARRaycastQuery? = sceneView.raycastQuery(
from: sceneView.center,
allowing: .estimatedPlane,
alignment: .any)
let results: [ARRaycastResult] = sceneView.session.raycast(raycastQuery!)
如果您更喜欢使用光线投射方法来击中节点(实体),请使用 RealityKit 模块而不是 SceneKit:
let arView = ARView(frame: .zero)
let query: CollisionCastQueryType = .nearest
let mask: CollisionGroup = .default
let raycasts: [CollisionCastHit] = arView.scene.raycast(from: [0, 0, 0],
to: [5, 6, 7],
query: query,
mask: mask,
relativeTo: nil)
guard let raycast: CollisionCastHit = raycasts.first else { return }
print(raycast.entity.name)
聚苯乙烯
无需寻找返回[SCNHitTestResult]的 SceneKit 的hitTest(_:options:)实例方法的替代品,因为它工作正常,现在不是弃用它的时候。
THE END
二维码