【问题标题】:SceneKit bouncy floorSceneKit 弹力地板
【发布时间】:2016-01-13 16:48:34
【问题描述】:

我正在尝试模拟一个柔软、有弹性的地板(即蹦床),这样当在某一点发出显着的冲动时,它会导致附近的物体在随机方向上反弹。

但是,我在尝试在 SceneKit 中重现此类行为时遇到了困难。

这是我迄今为止尝试过的:

  1. 在地面节点上调用 ground.physicsBody!.applyForce(SCNVector3Make(0, -999999, 0), atPosition: pos, impulse: true),该地面节点上附加了 .Kinematic 类型的物理体。
  2. 在连接有.Static 类型物理体的地面节点上调用ground.physicsBody!.applyForce(SCNVector3Make(0, -999999, 0), atPosition: pos, impulse: true)
  3. 创建一个SCNPhysicsField.radialGravityField(),将其附加到一个不可见的节点,将该节点定位在地板下方,最后赋予它负强度以将物体击退。

无论给定的冲动有多大,1 和 2 都不起作用。我还在地板和物体上验证了restitution > 0。请注意,虽然直接对物体施加脉冲是可行的,但我希望物理引擎根据前一个脉冲的距离和方向自动计算这些脉冲(即从蹦床上弹回的物体)(即一个人在trampoline) 而不是手动分配它们。

选项 3 在某种程度上给出了我想要的效果,但它对物体施加连续的力而不是瞬时的。

【问题讨论】:

  • 我会在蹦床上测试接触,然后对所有与蹦床接触的物体施加力。

标签: swift scenekit


【解决方案1】:

来自documentation

静态物体不受力和碰撞的影响,不能移动。 动态物体受力和与其他物体碰撞的影响 类型。 运动物体不受力或碰撞的影响,但 通过直接移动它们,您可能会导致影响动态的碰撞 身体。

听起来.Dynamic 类型的物理体就是您所追求的。如果您直接改变其位置而不是对其施加力,运动学体也可能会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2018-08-11
    • 2016-07-16
    • 1970-01-01
    • 2018-06-20
    • 2018-08-19
    相关资源
    最近更新 更多