SCNPhysicsShape(形状:变换:)是否创建多个形状?

ykejflvf  于 2022-10-04  发布在  Swift
关注(0)|答案(1)|浏览(181)

我的目标是从SceneKit的几个SCNBox几何图形中创建一个单一物理实体。

我的理解是,当我将SCNPhysicsShape(shapes:transforms:)传递给SCNPhysicsBody(type:shape:)时,它应该创建一个单一的物理体。

然而,我最终得到的结果似乎很可疑,它根本不是一个**单一的物理实体,而是几个独立的*物理实体--我传递给SCNPhysicsShape(shapes:transforms:)的每个形状对应一个。

当我打开scnView.debugOptions = .showPhysicsShapes时,我可以清楚地看到定义有问题的单独主体的红线。就其本身而言,这并不是非常令人信服的证据(可以想象,这些线可以在仍然是一个单一的物理体的情况下,出于任何原因而被展示出来)。

但这里还有另一项数据:在我遇到这个问题的项目中,有一个小球在场景中滚动--当这个球滚动到有问题的红线上时,球就会反弹到空中。因此,很明显,无论实际发生了什么,有一些我预计看不到的边缘

以下是说明该问题的一些代码。parent是包含子节点的SCNNode,是我为其分配物理主体的节点。请假定所有属性都已定义;我省略了不太相关的内容。

let childShape1 = SCNBox(width: 6, height: 2, length: 6, chamferRadius: 0.0)
//Other child shapes defined here...

//Set up the positional translation relative to the child node's parent:
let translateMatrixShape1 = SCNMatrix4MakeTranslation(childShape1.position.x, childShape1.position.y, childShape1.position.z)
//Other child translations defined here...

let parentShape = SCNPhysicsShape(shapes: [childShape1, childShape2, childShape3, childShape4], transforms: [translateMatrixShape1, translateMatrixShape2, translateMatrixShape3, translateMatrixShape4])

parent.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.static, shape: parentShape)

现在,parentShape是围绕一个中心点排列的四个矩形方框,创建了一种画框形状的对象。

该球是一个具有SCNSphere几何结构和动态物理体的SCNNode

**问题:**有人知道这里可能会发生什么吗?我是不是误解了这整件事的工作原理,或者这是SceneKit的局限性?

fcg9iug3

fcg9iug31#

通常,通过从(例如)创建平面克隆,可以从多个几何体对象创建一个单独的PhysicsBody。父节点。那么,这个新节点将只有一个几何体。对于PhysicsBody,然后可以使用新节点的几何体元素。此外,我建议使用凹面多面体作为静态主体类型。(我希望我没听错)

相关问题