swift - 如何从 scenekit 场景中删除特定节点?

标签 swift nodes scenekit

我使用下面的代码,它会检查触摸点,如果点为空则添加对象或删除对象。

@objc func didTap(withGestureRecognizer recognizer: UIGestureRecognizer) {

        let tapLocation = recognizer.location(in: sceneView)
        let hitTestResults = sceneView.hitTest(tapLocation)

        guard let node = hitTestResults.first?.node else {

            let hitTestResultsWithFeaturePoints = sceneView.hitTest(tapLocation, types: .featurePoint)

            if let hitTestResultWithFeaturePoints = hitTestResultsWithFeaturePoints.first {

                let translation = hitTestResultWithFeaturePoints.worldTransform.translation

                guard let carScene = SCNScene(named: "car.dae") else { return }
                let carNode = SCNNode()
                let carSceneChildNodes = carScene.rootNode.childNodes
                for childNode in carSceneChildNodes {
                    carNode.addChildNode(childNode)
                }
                carNode.position = SCNVector3(translation.x, translation.y, translation.z)
                carNode.scale = SCNVector3(0.5, 0.5, 0.5)
                sceneView.scene.rootNode.addChildNode(carNode)
            }
            return

        }
    node.removeFromParentNode()
}

但我的对象是由 DAE 文件创建的,它包含很多子节点。 如果我使用 node.removeFromParentNode() 它只会删除一个节点

如果我使用以下代码,它将删除屏幕上的所有对象。

sceneView.scene.rootNode.enumerateChildNodes { (existingNode, _) in
        existingNode.removeFromParentNode()
    }

如何从 scenekit 场景中删除特定节点?

最佳答案

您应该命名您的节点,然后您可以使用该名称将它们过滤掉。

sceneView.scene.rootNode.childNodes.filter({ $0.name == "yourName" }).forEach({ $0.removeFromParentNode() })

关于swift - 如何从 scenekit 场景中删除特定节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53956680/

相关文章:

swift - 如何为 UI 测试包启用网络流量? (XCTest、XCode - DNSServiceCreateConnection 失败)

ios - 每次调用 API 时键的数量都发生变化,如何解析 JSON 数组?

javascript - 有没有办法在 JavaScript 超时后再次调用当前函数(及其参数)?

javascript - 为什么我无法通过 document.getElementById ("node' s_id").child 选择子节点?

xcode - 在 xcode 中创建 scnassets 目录的正确方法是什么

swift - 使用 Alamofire 时出错

ios - 带有层角半径和阴影的 UILabel

c - 将单词保存到 C 中的链表的问题

objective-c - SceneKit——在两点之间画一条线

iOS ARKit + SceneKit 物理接触检测缩放问题