ARKit - SCNNode连续移动

时间:2018-02-23 11:29:06

标签: ios swift scenekit arkit

我试图创建一个用户堆叠不同几何形状的应用程序。在加载到ARSCNView内的.scn文件中,我插入一个静态平面,然后在每次点击用户时,应用程序都会插入一个动态SCNNode。

第一个节点插入平面上方几英寸处,以复制掉落的物体。然后,每个其他节点都被丢弃在另一个节点之上。

这是该应用程序的主要思想;添加3个或4个节点后出现问题,它们看起来互相滑动,几乎摇晃,整个结构崩溃。

这是我插入的节点:

let dimension: CGFloat = 0.075
let cube = SCNBox(width: dimension, height: dimension, length: dimension, chamferRadius: 0.0)
let node = SCNNode(geometry: cube)

node.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.dynamic, shape: nil)
node.physicsBody?.mass = 2.0

node.physicsBody?.friction = 1.0
node.physicsBody?.restitution = 0.01

node.physicsBody?.damping = 0.0
node.physicsBody?.angularDamping = 0.0

node.physicsBody?.rollingFriction = 1.0

node.physicsBody?.allowsResting = true

let insertionYOffset = 0.3
node.position = SCNVector3(hitResult.worldCoordinates.x, hitResult.worldCoordinates.y + Float(insertionYOffset), hitResult.worldCoordinates.z)

我试图使用这些值,这些是最好的,但它们不足以创建稳定的块结构。

作为一项要求,我需要保持块的动态,它们需要受到重力,风等的影响。

2 个答案:

答案 0 :(得分:1)

这个问题最有可能与一个名为Dynamic的因素有关,这个因素可以让它连续移动,或者可能与对象相互碰撞以解决这个问题所需要做的就是将碰撞模板更改为两个不同的数字。

答案 1 :(得分:1)

我看到两点可能是模拟的缺陷:

  • 您的物品堆叠在一起。当两个物体碰撞时,会添加少量误差,以使物理处于稳定阶段,并防止出现奇怪的行为。因此,当您堆叠对象时,您会添加错误数量,并且模拟变得不准确。我建议随着时间的推移或根据位置使物体静止,或稍微减少重力。
  • 对于使用单位大小调整大小的对象,大多数物理引擎效果更好(大多数情况下,如Box2D或PhysX中的1)。非常小或非常大的物体往往不太自然。对于模拟,0.075听起来有点小。我没有看到明显的解决方案,也许找一种方法来改变参考尺寸。