ios - 两个动态 SCNNode 不发生碰撞 (Scenekit)

标签 ios swift scenekit arkit scnnode

我目前正在 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/

相关文章:

ios - 将数据添加到一对多核心数据模型

ios - Audiokit 4.5.2 - 无法通过终端中的 cocoa pod 安装

ios - 自动布局约束警告

ios - 在 SCNNode 上加载 WebView CALayer 的问题

ios - 单击删除按钮,Swift,删除/删除页面 View Controller 内显示的 Controller

ios - 如何让 iOS 应用程序支持 iPhone 6,而不支持 iPhone 5S?

ios - 未捕获的异常'NSInvalidArgumentException'问题,原因:'***-[__ NSArrayM insertObject:atIndex:]:对象不能为nil

ios - 让 iPhone 在锁定时振动多次的最佳方法是什么?

ios - SceneKit 中的廉价阴影

ios - 将 Metal 深度缓冲区与场景套件渲染集成