我试图在Scene Kit的物理引擎中找出碰撞的力量。为了简单起见,我使用以下代码:
extension MyScene: SCNPhysicsContactDelegate {
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
print("collisionImpulse=\(contact.collisionImpulse)")
}
根据contactBitmasks和collisionBitmasks为每次碰撞调用该函数,但每次我都联系.collisionImpulse = 0.0
这是Scene Kit的错误吗?我做错了什么?
我放弃了尝试解决此问题并使用以下内容:
let factor: Float = 1.2
let relativeVelocity = contact.nodeA.physicsBody!.velocity - contact.nodeB.physicsBody!.velocity
let velMagnitude = relativeVelocity.length()
let force = min(velMagnitude*factor, 1.0)
SCNVector3减法的辅助函数:
/// Vector subtract
func - (l: SCNVector3, r: SCNVector3) -> SCNVector3 {
return SCNVector3(l.x-r.x, l.y-r.y, l.z-r.z)
}
答案 0 :(得分:1)
如果您使用" didEnd"则crashImpulse不是nil。或" didUpdate"而不是" didBegin":
func physicsWorld(_ world: SCNPhysicsWorld, didEnd contact: SCNPhysicsContact) {
print("collisionImpulse=\(contact.collisionImpulse)")
}
我的猜测是,在didBegin调用时尚未计算出值。