Два динамических узла SCN не сталкиваются (Scenekit)

В настоящее время я работаю над созданием игры Scenekit в ARKit.

У меня есть два динамических узла SCN, и когда они контактируют друг с другом, они проходят друг через друга.

Я настроил collisionBitMask физического тела каждого узла так, чтобы он включал друг друга, например:

ballNode.physicsBody?.collisionBitMask = BodyType.floor.rawValue |  BodyType.opponent.rawValue

Я также настроил физическое тело каждого узла как динамическое, чтобы на узел влияли силы и столкновения.

Когда я вызываю physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact), он правильно регистрирует конфликт между двумя узлами, однако узлы продолжают проходить друг через друга.

Когда я делаю один из узлов кинематическим, а не динамическим, он правильно блокирует другой узел, и они не проходят друг через друга. Но когда он кинематический, он не реагирует на силу, которую я к нему прилагаю, поэтому я хочу, чтобы он оставался динамичным.

Возможно ли, чтобы два динамических узла сталкивались друг с другом, не проходя через них?


person tennis25    schedule 27.06.2018    source источник


Ответы (1)


Я думаю, что PhysicalShape отсутствует, поэтому объявлен как nil

geometryNode.physicsBody = SCNPhysicsBody(type: .Dynamic, shape: nil)

Вместо:

let pShape = SCNPhysicsShape(geometry: SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0.0), options: [:])
boxNode.physicsBody = SCNPhysicsBody(type: .Dynamic, shape: pShape)

Я надеюсь, что это поможет, пожалуйста, опубликуйте код.

Альтернативой для создания формы является init (node: options :)

person Jose Paredes    schedule 28.06.2018
comment
Если форма объявлена ​​как nil, тогда SceneKit автоматически определит наилучшую форму для физического тела. developer.apple.com/documentation/scenekit/scnphysicsbody/ - person Jordan; 14.01.2019