为什么 SCNPhysicsContact.collisionImpulse 总是 0.0?
Why is SCNPhysicsContact.collisionImpulse always 0.0?
我试图找出 Scene Kit 物理引擎中的碰撞力。为了简单起见,我使用以下代码:
extension MyScene: SCNPhysicsContactDelegate {
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
print("collisionImpulse=\(contact.collisionImpulse)")
}
根据 contactBitmasks 和 collisionBitmasks 每次碰撞都会调用该函数,但每次我得到 contact.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)
}
如果您使用 "didEnd" 或 "didUpdate" 而不是 "didBegin",则 collisionImpulse 不为零:
func physicsWorld(_ world: SCNPhysicsWorld, didEnd contact: SCNPhysicsContact) {
print("collisionImpulse=\(contact.collisionImpulse)")
}
我的猜测是在调用 didBegin 时尚未计算值。
我试图找出 Scene Kit 物理引擎中的碰撞力。为了简单起见,我使用以下代码:
extension MyScene: SCNPhysicsContactDelegate {
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
print("collisionImpulse=\(contact.collisionImpulse)")
}
根据 contactBitmasks 和 collisionBitmasks 每次碰撞都会调用该函数,但每次我得到 contact.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)
}
如果您使用 "didEnd" 或 "didUpdate" 而不是 "didBegin",则 collisionImpulse 不为零:
func physicsWorld(_ world: SCNPhysicsWorld, didEnd contact: SCNPhysicsContact) {
print("collisionImpulse=\(contact.collisionImpulse)")
}
我的猜测是在调用 didBegin 时尚未计算值。