使用重力使 SCNNode 下降?
Make a SCNNode drop using gravity?
我有一个 SceneKit 设置,其中有一个 Sphere 设置为 Dynamic body。
我能够 运行 该应用程序并看到球体落在静态 body 地板上。
我想做的是设置场景,这样 sfere 最初就不会掉落。
然后当函数是 运行 我希望 sfere 下降。
使场景突然(可能在按下按钮或其他东西时)放下球体的正确逻辑/步骤是什么?
我也试过将球体设置为质量 0,然后将质量设置为 100,但它不会导致掉落...
仅当您希望它受重力影响时才将物理体设置为球体应该可行。
Mass doesn't control how fast something falls. 在现实世界中确实如此,但在走捷径而不是模拟现实世界物理的每个细节的模拟中更是如此。 (可悲的是,iOS 设备仍然没有 CPU 的能力来解释地球的旋转参考系,你的球体和任何靠近它的物体之间的范德瓦尔斯吸引力,强大的使其 三角形 原子保持在一起的力,等等)在 SceneKit 中,重力只是特定方向上的恒定加速度。
将质量设置为零并将其切换为其他东西会干扰 static/kinematic 和动态物体之间的区别...所以不要那样做。
,您可以 add/remove 球体中的物理体,当您希望它完全受物理影响或不受物理影响时。
但是,如果您出于其他原因想要保留球体的物理体,例如允许其他物体在您开始下落之前与其发生碰撞,该怎么办?您可以使用几种方法:
- 将球体的
damping
设置为1.0。
- 将球体的
velocityFactor
设置为零(至少在重力方向)。
当其他物体撞击它时,这两者都会阻止球体移动。如果你想让球被撞到周围,但不受重力影响,最好的办法可能是为物理场切换场景重力:
- 将
scene.physicsWorld.gravity
设置为 SCNVector3Zero
。
- 将使用
linearGravityField
构造函数创建的 SCNPhysicsField
添加到您的场景,并设置其 direction
和 strength
以获得您想要的那种重力行为。
- 在你的球体和重力场上设置
categoryBitMask
s,这样场会影响其他物体而不是球体。
无论您使用这些方法中的哪一种,您都可以在需要 "turn gravity on" 球体时更改它们:减少 damping
、重置 velocityFactor
,或更改球体的或重力场的 categoryBitMask
.
从 iOS 9 开始,您可以将 isAffectedByGravity
属性 设置为 false
然后将值翻转为 true
以使球体下降: https://developer.apple.com/reference/scenekit/scnphysicsbody/1514738-isaffectedbygravity
我有一个 SceneKit 设置,其中有一个 Sphere 设置为 Dynamic body。
我能够 运行 该应用程序并看到球体落在静态 body 地板上。
我想做的是设置场景,这样 sfere 最初就不会掉落。
然后当函数是 运行 我希望 sfere 下降。
使场景突然(可能在按下按钮或其他东西时)放下球体的正确逻辑/步骤是什么?
我也试过将球体设置为质量 0,然后将质量设置为 100,但它不会导致掉落...
仅当您希望它受重力影响时才将物理体设置为球体应该可行。
Mass doesn't control how fast something falls. 在现实世界中确实如此,但在走捷径而不是模拟现实世界物理的每个细节的模拟中更是如此。 (可悲的是,iOS 设备仍然没有 CPU 的能力来解释地球的旋转参考系,你的球体和任何靠近它的物体之间的范德瓦尔斯吸引力,强大的使其 三角形 原子保持在一起的力,等等)在 SceneKit 中,重力只是特定方向上的恒定加速度。
将质量设置为零并将其切换为其他东西会干扰 static/kinematic 和动态物体之间的区别...所以不要那样做。
但是,如果您出于其他原因想要保留球体的物理体,例如允许其他物体在您开始下落之前与其发生碰撞,该怎么办?您可以使用几种方法:
- 将球体的
damping
设置为1.0。 - 将球体的
velocityFactor
设置为零(至少在重力方向)。
当其他物体撞击它时,这两者都会阻止球体移动。如果你想让球被撞到周围,但不受重力影响,最好的办法可能是为物理场切换场景重力:
- 将
scene.physicsWorld.gravity
设置为SCNVector3Zero
。 - 将使用
linearGravityField
构造函数创建的SCNPhysicsField
添加到您的场景,并设置其direction
和strength
以获得您想要的那种重力行为。 - 在你的球体和重力场上设置
categoryBitMask
s,这样场会影响其他物体而不是球体。
无论您使用这些方法中的哪一种,您都可以在需要 "turn gravity on" 球体时更改它们:减少 damping
、重置 velocityFactor
,或更改球体的或重力场的 categoryBitMask
.
从 iOS 9 开始,您可以将 isAffectedByGravity
属性 设置为 false
然后将值翻转为 true
以使球体下降: https://developer.apple.com/reference/scenekit/scnphysicsbody/1514738-isaffectedbygravity