从碰撞收集的SCNNode调用方法

时间:2019-01-20 09:17:19

标签: ios collision arkit scnnode

我想在IOS上为ARKit创建射击游戏。在这个游戏中,我将弹丸射击到场景中,当它们碰撞时,我想对被击中的物体造成一些损害。

func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
        if contact.nodeA.physicsBody?.categoryBitMask == PhysicType.Target.rawValue {
            //Hit target
        }else if contact.nodeB.physicsBody?.categoryBitMask == PhysicType.Target.rawValue {
            //Hit target
        }
    }

我要搜索的内容应如下所示:

let target = contact.nodeA as? Target
target.hit()

但是似乎无法将节点转换为我的Target类。另一个想法是,将目标节点的位置与场景中所有节点的位置进行比较。如果它们的位置相同,我知道可以在哪个节点上调用该方法:

func hitTarget(node: SCNNode){
        for child in scene.childNodes{
            if child.name == "Target" {
                guard let target = child as? Target else  {continue}
                if target.presentation.position.x == node.presentation.position.x &&
                    target.presentation.position.y == node.presentation.position.y &&
                    target.presentation.position.z == node.presentation.position.z{
                    target.hit(damage: 5)
                }
            }
        }

    }

我当前在场景中只有一个对象,因此它必须是目标对象。但是无论如何,这两种立场都不同。我真的不知道node.position和node.presentation.position之间的区别。但是我都尝试过。

重要的是,因为我认为这可能是问题所在:我有一个中心对象。我添加的所有目标对象都相对于该中心对象。所以我有rootNode-> centerObj-> [所有目标对象] 也许这就是为什么位置不一样的原因。

我想知道的是,如何正确地获取正确的节点(该节点已被我击中并将其转换为它所属的类)?

0 个答案:

没有答案