Physics Simulation 之 SCNPhysicsShape

此系列为官方文档翻译,用于学习SceneKit

SCNPhysicsShape 物理体实体的抽象,用于调整碰撞检测。

概述

SceneKit对场景中的SCNPhysicsBody对象进行接触检测和其他模拟时,它使用物理形状而不是可见对象的渲染几何。这种方法既提高了模拟性能,也使您更容易设计基于玩家可以交互的场景元素的游戏玩法。

简单与复杂的形状

当您允许SceneKit自动创建物理形状时,它会使用尽可能简单的形状来匹配物理体所附加的节点的几何形状。这种方法可以最大程度地提高模拟性能,但对于某些对象可能导致不真实的物理行为。
您可以通过定义更接近场景可见几何形状的物理形状来使模拟的行为更加真实。但这种方法会降低性能,因此您需要限制物理形状的细节数量。仅在对应用程序的精确碰撞检测很重要的物体上使用最高级别的细节。

如果您使用基本几何类(SCNBoxSCNSphereSCNPyramidSCNConeSCNCylinderSCNCapsule)之一创建物理形状,则SceneKit使用该几何形状的理想形式来创建物理形状,而不是使用几何形状的顶点数据来模拟碰撞。例如,如果您从SCNSphere对象创建一个物理形状,则SceneKit将模拟射线通过球的半径时的相互碰撞。

由于简单几何的理想形式比用于显示它们所需的顶点数据在计算上简单得多,因此使用基本几何形状(或使用init(shapes:transforms :)方法创建的复合形状)通常提供了模拟精度和性能之间的最佳平衡。

更改物理体的形状

物理形状是不可变的,但您可以通过创建新的SCNPhysicsShape实例并将其分配给体的physicsShape属性来更改与物理体关联的形状。

相关API

创建物理形状

基于几何对象创建物理形状。

1
init(geometry: SCNGeometry, options: [SCNPhysicsShape.Option : Any]?)

从节点或节点层次结构创建物理形状。

1
init(node: SCNNode, options: [SCNPhysicsShape.Option : Any]?)

组合物理形状

通过组合其他物理形状创建新的物理形状。

1
init(shapes: [SCNPhysicsShape], transforms: [NSValue]?)

获取有关形状的信息

用于创建形状的对象。

1
var sourceObject: Any

用于创建形状的选项字典。

1
var options: [SCNPhysicsShape.Option : Any]?

用于创建复合形状的变换数组。

1
var transforms: [NSValue]?

形状选项

创建物理形状时使用的选项字典的键。

1
struct SCNPhysicsShape.Option

扩展

详细内容请看:SCNPhysicsShape