我目前正在 ARKit 中制作 Scenekit 游戏。
我有两个动态SCNNode,当它们相互联系时,它们会互相穿过。
我已经将每个节点的物理体的碰撞位掩码设置为相互包含,如下所示:
ballNode.physicsBody?.collisionBitMask = BodyType.floor.rawValue | BodyType.opponent.rawValue
我还将每个节点的物理体设置为动态的,以便节点受到力和碰撞的影响。
当我调用 physicalsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact)
时,它确实正确地注册了两个节点之间存在碰撞,但是节点继续相互穿过。
当我将其中一个节点设置为运动节点而不是动态节点时,它会正确阻挡另一个节点,并且它们不会相互穿过。但是当它是运动的时,它不会对我施加给它的力使用react,所以我想保持它的动态。
是否可以让两个动态节点在不穿过的情况下相互碰撞?
最佳答案
我认为“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:)
关于ios - 两个动态 SCNNode 不发生碰撞 (Scenekit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51067494/