我想使用hitTest
在检测到的表面上将我前面的物体放在不触摸屏幕的地方(例如IKEA Place或Snapchat)
有人知道吗?
谢谢
答案 0 :(得分:1)
这是在不触摸屏幕的情况下将节点放置在检测到的表面上的方法。
在viewWillAppear中将配置添加到您的ARSCNView。添加布尔变量,该变量将检查是否检测到了表面。
var surfaceDetected = false
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
sceneView.delegate = self
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
sceneView.session.run(configuration)
}
别忘了继承ARSCNViewDelegate协议并实现下一个方法。
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard !surfaceDetected else { return }
surfaceDetected = true
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
let x = CGFloat(planeAnchor.transform.columns.3.x)
let y = CGFloat(planeAnchor.transform.columns.3.y)
let z = CGFloat(planeAnchor.transform.columns.3.z)
let position = SCNVector3(x,y,z)
sceneView.scene.rootNode.addChildNode(yourNode)
yourNode.position = position
}
希望有帮助!