swift - 如何从场景包场景中删除特定节点?
问题描述
我使用以下代码,它将检查触摸点,如果该点为空,它将添加对象或删除对象。
@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()
}
如何从场景包场景中删除特定节点?
解决方案
您应该命名您的节点,然后您可以使用该名称将它们过滤掉。
sceneView.scene.rootNode.childNodes.filter({ $0.name == "yourName" }).forEach({ $0.removeFromParentNode() })
推荐阅读
- node.js - Mongoose findById 查询不返回结果。对象始终为空。
- git - 无法连接到存储库:无法创建 http 代理 uri
- python - 如何在 Django 中呈现多个表单
- python - dataframe combine_first does not work as well as fillna
- c# - 展平数据库中实体上的复杂对象
- java - 需要通过section id从HTML中获取href
- angular - 如何在angular2+中使用螺栓而不是http请求
- angular - 变量在打字稿中自动更改
- php - SQL: Select all rows that match something in another table
- symfony - I can not retrieve the parameters of a URL passed in GET in symfony 3