ARKIT:处理点击以显示 /隐藏节点



我是Arkit的新手,我正在尝试一个示例来在TAP位置创建SCNBox。我要做的是在初始触摸时我创建一个盒子,然后在创建框上的第二次点击中,应将其从场景中删除。我正在进行热门测试。但是它不断添加盒子。我知道这是一项简单的任务,但我无法做到

    @objc func handleTap(sender: UITapGestureRecognizer) {
    print("hande  tapp")
    guard let _ = sceneView.session.currentFrame
        else { return }
    guard let scnView = sceneView else { return }
    let touchLocation = sender.location(in: scnView)
    let hitTestResult = scnView.hitTest(touchLocation, types: [ .featurePoint])
    guard let pointOfView = sceneView.pointOfView else {return}
    print("point   (pointOfView.name)")
    if hitTestResult.count > 0 {
        print("Hit")
        if let _ = pointOfView as? ARBox {
            print("Box Available")
        }
        else {
            print("Adding box")
            let transform = hitTestResult.first?.worldTransform.columns.3
            let xPosition = transform?.x
            let yPosition = transform?.y
            let zPosition = transform?.z
            let position = SCNVector3(xPosition!,yPosition!,zPosition!)
            basketCount = basketCount + 1
            let newBasket = ARBox(position: position)
            newBasket.name = "basket(basketCount)"
            self.sceneView.scene.rootNode.addChildNode(newBasket)
            boxNodes.append(newBasket)
        }
    }
}

pointofview 是场景的rootnode,它是用来渲染整个场景的场景的。对于通用情况,通常是带有照明/相机的空节点。我认为您不应该将其施加为ARBOX/或任何类型的SCNNODE(S)。

您可能可以尝试的是下面的逻辑( hitResults是您的Hittest 的结果):

if hitResults.count > 0 {
    if let node = hitResults.first?.node as SCNNode? (or ARBox) {
    // node.removeFromParentNode()
    // or make the node opaque if you don't want to remove
else {
    // add node. 

最新更新