Я пытаюсь выяснить силу столкновения в физическом движке Scene Kit. Для простоты я использую следующий код:Почему SCNPhysicsContact.collisionImpulse всегда 0.0?
extension MyScene: SCNPhysicsContactDelegate {
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
print("collisionImpulse=\(contact.collisionImpulse)")
}
функция вызывается для каждого столкновения в соответствии с contactBitmasks и collisionBitmasks, но каждый раз, когда я получаю contact.collisionImpulse = 0,0
ли это сцена 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)
функция Helper для SCNVector3 вычитания:
/// Vector subtract
func - (l: SCNVector3, r: SCNVector3) -> SCNVector3 {
return SCNVector3(l.x-r.x, l.y-r.y, l.z-r.z)
}
У меня такая же проблема, вы когда-нибудь узнали, что случилось? –
Я этого не делал. Я использую обходное решение, упомянутое выше, но на самом деле это не решение проблемы. – eisental
Наконец-то выяснилось, почему, проверьте мой ответ ниже. –