Swift / ARKit:在不触摸屏幕的情况下将对象节点放在检测到的表面上



我想在不触摸屏幕的情况下使用hitTest将物体放在检测到的表面上(如IKEA Place或Snapchat)

有人有解决方案吗?

谢谢

这是一种在不触摸屏幕的情况下将节点放置在检测到的表面上的方法。

在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 
}

希望对您有所帮助!

最新更新