【发布时间】:2022-10-08 20:27:08
【问题描述】:
我的目标是创建一个单身的几个 SceneKit 的 SCNBox 几何体中的物理体。
我的理解是,当我将SCNPhysicsShape(shapes:transforms:) 传递给SCNPhysicsBody(type:shape:) 时,它应该创建一个单独的物理体。
但是,我最终得到了一些看起来可疑的东西不是一个单身的物理体,而是几个分离物理实体——我传入SCNPhysicsShape(shapes:transforms:) 的每个形状都有一个。
当我打开scnView.debugOptions = .showPhysicsShapes 时,我可以清楚地看到定义有问题的单独主体的红线。就其本身而言,这并不是非常令人信服的证据(可以想象,这些线条可以出于任何原因显示,同时仍然是一个单一的物理体)。
但是这里还有另一条数据:我遇到这个问题的项目有一个在场景中滚动的小球——当那个球滚过有问题的红线时,球会反弹到空中少量。所以,很明显,无论实际发生什么,有一些我希望看不到的边缘.
此行为在以下 GIF 中清晰可见。在其中,每个彩色块都是一个单独的 SCNBox 几何体,具有自己的物理体。每个块都有完全相同的position.z。当球穿过一个几何形状与另一个几何形状相交的点时,球会大幅反弹。
这是一些说明问题的代码。 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 是四个围绕中心点排列的矩形框,创建了一种相框形状的对象。
球是SCNNode,具有SCNSphere 几何结构和动态物理体。
问题:有谁知道这里可能发生了什么?我是否以某种方式误解了整个事情的工作原理,或者这是 SceneKit 的限制?
【问题讨论】:
-
我不知道
flatennedClone。根据它的文档,这看起来真的很有希望。我试试看,谢谢!