[英]Swift SceneKit: Why does it detect contact between nodes too early?
我正在嘗試使用SCNPhysicsContactDelegate構建一些項目,但發現它太早發現了節點之間的聯系。 我需要它是100%正確和正確的。 我附上了過早的聯系人檢測的屏幕截圖。 他們的物理機構有我的代碼:
nodeA代碼:
nodeA = SCNNode(geometry: SCNBox(width: 0.3, height: 0.3, length: 0.3, chamferRadius: 0.05))
nodeA.position = SCNVector3(0, 3.3, 0)
nodeA.geometry?.firstMaterial?.diffuse.contents = UIColor.red
nodeA.physicsBody = SCNPhysicsBody.dynamic()
nodeA.physicsBody?.physicsShape = SCNPhysicsShape(node: nodeA, options: nil)
nodeA.physicsBody?.categoryBitMask = PhysicsCategories.nodeA
nodeA.physicsBody?.contactTestBitMask = PhysicsCategories.nodeB
nodeA.physicsBody?.isAffectedByGravity = false
nodeA.name = "nodeA"
nodeA.opacity = 0
self.scene.rootNode.addChildNode(self.nodeA)
nodeB代碼:(nodeB已經存在,因此我僅添加物理實體)
nodeB.physicsBody = SCNPhysicsBody.kinematic()
nodeB.physicsBody?.physicsShape = SCNPhysicsShape(node: nodeB, options: nil)
nodeB.physicsBody?.categoryBitMask = PhysicsCategories.nodeB
nodeB.physicsBody?.contactTestBitMask = PhysicsCategories.nodeA
聯系功能代碼:
func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
scene.isPaused = true
}
能否請您幫我找到解決方案? 我期待着你們的聽證會。
謝謝雅庫布
我找到了解決方案! 這兩行導致不精確的接觸檢測:
nodeA.physicsBody?.physicsShape = SCNPhysicsShape(node: nodeA, options: nil)
和nodeA.physicsBody?.physicsShape = SCNPhysicsShape(node: nodeA, options: nil)
nodeB.physicsBody?.physicsShape = SCNPhysicsShape(node: nodeB, options: nil)
。
問題在於,當您使用節點屬性創建SCNPhysicsShape()時,它是不精確的,但是當您使用節點幾何形狀創建時,所有這些操作都是完全正確和精確的。 在我的情況下,解決方案如下(用這些行替換問題行):
nodeA.physicsBody?.physicsShape = SCNPhysicsShape(geometry: SCNBox(width: 0.3, height: 0.3, length: 0.3, chamferRadius: 0.05), options: nil)
和nodeB.physicsBody?.physicsShape = SCNPhysicsShape(geometry: SCNBox(width: 0.1, height: 0.5, length: 1, chamferRadius: 0), options: nil)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.