Как я могу удалить определенные узлы из сцены сцены? - PullRequest
0 голосов
/ 28 декабря 2018

Я использую следующий код, он проверит точку касания и добавит объект, если точка пуста, или удалит объект.

@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()
    }

Как удалить определенные узлы изсцена сцены?

1 Ответ

0 голосов
/ 28 декабря 2018

Вы должны назвать свои узлы, чтобы использовать их для фильтрации.

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