Один из подходов, который вы можете использовать, - это создать глобальную переменную для каждого добавляемого вами узла, например:
var labelNode: SCNNode?
var allLabelNode: SCNNode?
var fruitNode: SCNNode?
Затем вы можете выполнить тест, чтобы убедиться, что они nil
.Если узел nil
, то создайте его, в противном случае удалите его, например:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
//1. Get The Current Touch Location & Perform An ARSCNHitTest To Check For Any Hit SCNNode's
guard let currentTouchLocation = touches.first?.location(in: self. self.sceneView),
let hitTestNode = self.sceneView.hitTest(currentTouchLocation, options: nil).first?.node
else { return }
//2. Enumerate The Nodes We Have By Name
switch hitTestNode.name {
case "lableNode":
//1. If The LabelNode Doesnt Exist Create It
if labelNode == nil{
//Create The Node Here
}else{
labelNode?.removeFromParentNode()
labelNode = nil
}
case "AllLabelNode":
//2. If The LabelNode Doesnt Exist Create It
if allLabelNode == nil{
//Create The Node Here
}else{
allLabelNode?.removeFromParentNode()
allLabelNode = nil
}
case "fruitNode":
//3. If The LabelNode Doesnt Exist Create It
if fruitNode == nil{
//Create The Node Here
}else{
fruitNode?.removeFromParentNode()
fruitNode = nil
}
default:
return
}
}
Обратите внимание, что метод Touches, вероятно, должен быть подвергнут рефакторингу, но его должно быть более чем достаточно, чтобы указать вам на правонаправление ...