ios - swift 场景Kit : Why does it detect contact between nodes too early?

标签 ios swift scenekit physics scnnode

我正在尝试使用 SCNPhysicsContactDelegate 构建一些项目,但我发现它太早检测到我的节点之间的接触。我需要它 100% 精确且正确。我附上过早接触检测的屏幕截图。 这是我的物理体代码:

节点A代码:

        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)

节点B代码: (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
        }

bad collision image

能否请有人帮我找到解决方案? 我期待你们的听证会。

谢谢雅库布

最佳答案

我找到了解决办法!这两行导致接触检测不精确:

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)

关于ios - swift 场景Kit : Why does it detect contact between nodes too early?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59040267/

相关文章:

swift - SceneKit - 如何获取 .dae 模型的动画?

ios - 试图在 iOS 中制作免责声明 View Controller

ios - 从异步回调更新 UI 的问题

swift - 当iPhone进入后台状态时dispatch_time如何工作?

ios - 将 ray wenderlich mapkit 教程升级到 xcode 7 错误 mkplacemark

crash - SceneKit presentScene(_withTransition :incomingPointOfView completionHandler) crash with dynamically loaded SCNScene

ios - 使用 Swift 以编程方式更改 SceneKit 中 3D TextNode 的文本

iphone - iOS sdk 的最佳绘图库

ios - 如何关闭文本字段中的键盘

swift - UIImageView 与aspectToFil 并仅裁剪图像的顶部