我有一个目标(SCNTorus
箍)我正在拍摄SCNSphere
。我需要检测球体何时从一侧穿过圆环,然后从圆环的另一侧出来。
我目前的方法是在physicsBody.collisionBitMask
上使用节点SCNNode
。使用SCNPhysicsContactDelegate
,我能够检测到didEnd
等各种回调。
在记录时,我正在查看SCNPhysicsContact的penetrationDistance
。 penetrationDistance
是
两个物理实体之间的重叠距离,以场景坐标空间为单位。
func physicsWorld(_ world: SCNPhysicsWorld, didEnd contact: SCNPhysicsContact) {
let maskA = contact.nodeA.physicsBody?.categoryBitMask
let maskB = contact.nodeB.physicsBody?.categoryBitMask
let penetrationDistance = contact.penetrationDistance
if (maskA == CollisionTypeOne) && (maskB == CollisionTypeTwo) {
print(penetrationDistance)
} else if (maskB == CollisionTypeOne) && (maskA == CollisionTypeTwo) {
print(penetrationDistance)
}
}
我的期望是我可以将球体的大小/直径与penetrationDistance
进行比较。对于一个实际的事件(球越过篮筐),现实是didEnd
多次射击。 penetrationDistance
似乎太小而无法提供帮助。
如何在SceneKit中正确检测传递“碰撞”事件?