使用重力使SCNNode掉落?

时间:2015-01-08 16:35:43

标签: ios scenekit

我有一个SceneKit设置,其中有一个Sphere,它被设置为动态体。

我能够运行该应用程序,并在静态车身底板上看到球体掉落。

我要做的是设置场景,使得sfere最初不会掉落。

然后当一个函数运行时,我希望sfere放弃。

突然制作场景的正确逻辑/步骤是什么(可能是按下某个按钮或什么东西)掉落球体?

我还尝试将球体设置为质量0,然后将质量设置为100但不会导致掉落......

3 个答案:

答案 0 :(得分:9)

Mass doesn't control how fast something falls.在现实世界中确实如此,但在采用快捷方式而非模拟现实世界物理学的每个细节的模拟中更是如此。 (可悲的是,iOS设备仍然没有CPU能力来解释地球的旋转参考系,你的球体与任何特别靠近它的身体之间的范德瓦尔斯吸引力,保持其三角形的强大力量原子等等。)在SceneKit中,重力只是特定方向的恒定加速度。

将质量设置为零并将其切换为其他东西会干扰静态/动态和动态体之间的区别......所以不要这样做。

As @mnuages notes,当您希望它受物理影响或完全不受物理影响时,可以在球体中添加/删除物理体。

但是如果你想保留球体物理体的原因还有其他原因 - 例如让它的其他物体在它开始下降之前就与它发生碰撞了怎么办?您可以使用以下几种方法:

当其他东西击中时,这两个都会阻止球体移动。如果你想让球被撞倒,但不受重力的影响,那么最好的办法就是切换物理场的场景引力:

  1. scene.physicsWorld.gravity设为SCNVector3Zero
  2. 将使用linearGravityField构造函数创建的SCNPhysicsField添加到您的场景中,并设置其directionstrength以获得您想要的重力行为。
  3. 在球体和重力场上设置categoryBitMask s,使得该字段影响其他实体,但不影响球体。
  4. 无论您使用哪种方法,都可以在想要"turn gravity on"球体时更改它们:减少damping,重置velocityFactor,或更改球体或重力字段categoryBitMask

答案 1 :(得分:2)

从iOS 9开始,您可以将isAffectedByGravity属性设置为false,然后将值翻转为true以使球体下降:https://developer.apple.com/reference/scenekit/scnphysicsbody/1514738-isaffectedbygravity

答案 2 :(得分:1)

只有当你希望物理体受到重力影响时,才能将物理体设置为球体。