gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:33:30 26 4
gpt4 key购买 nike

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

@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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com