碰撞形状
您可以通过添加一个或多个CollisionShapes作为子节点来定义PhysicsBody的形状。碰撞形状会决定与其他物理对象的交互。IdeaXR提供多种碰撞形状, 具有不同的性能和精度权衡。
note
必须在属性检查器面板中为碰撞形状节点添加一个Shape resource,否则没有意义。
当你将多个碰撞形状添加到一个PhysicsBody中时, 你不必担心它们会重叠, 它们不会相互 "碰撞"。
基础碰撞形状
IdeaXR提供了以下基本碰撞形状类型:
- BoxShape
- SphereShape
- CapsuleShape
- CylinderShape
您可以使用一个或多个原始形状来表示大多数较小物体的碰撞。然而, 对于更复杂的物体, 如大型船舶或整个水平面, 你可能需要凸形或凹形来代替。 建议动态对象使用基础碰撞形状, 如RigidBodies和KinematicBodies, 因为它们的行为是可靠的, 通常也能提供更好的性能。
凸碰撞和三角网格碰撞
凸形碰撞形状是基础碰撞形状和凹形碰撞形状之间的折衷, 可以表示任何复杂的形状, 但要警告的是, 正如名称所示, 一个单独的形状只能表示一个凸的形状. 要用单个碰撞形状定义一个凹形对象, 需要使用一个凹形碰撞形状. 例如, 一个金字塔是凸的, 但一个空心盒子是凹的.
根据对象的复杂程度, 可能要通过使用多个凸形而不是一个凹形碰撞形状来获得更好的性能。IdeaXR可以使用凸分解来生成与空心物体大致匹配的凸形。请注意, 在一定数量的凸形之后, 就没有了这种性能优势, 对于大而复杂的对象, 如整个关卡, 建议使用凹形代替。
您可以通过选择一个网格实例, 并使用3D视图顶部的网格菜单从编辑器中生成一个或多个凸形碰撞形状. 编辑器有两种生成模式:
- 创建单凸碰撞同级 ---- 创建一个CollisionShape碰撞形状节点, 并自动生成一个凸碰撞形状, 由于只生成单个形状, 因此提供了良好的性能, 非常适合小对象。如下图(其他创建类似):
- 创建多个凸形碰撞同级 ---- 创建多个CollisionShape碰撞形状节点, 每个节点都有一个凸形, 由于它能生成多个形状, 所以对于凹形物体来说, 精度更高, 但性能不佳。对于中等复杂度的对象, 可能会比使用单个凹形碰撞形状更快。
凹形碰撞形状, 也称为三角碰撞形状, 可以采取任何形式, 从几个到数千个三角形, 凹形是最慢的选择, 但也是IdeaXR中最精确的。除非刚体的模式是静态的, 否则它不能用于KinematicBodies或RigidBodies。
您可以通过选择一个网格实例, 并使用3D视窗顶部的网格菜单从编辑器中生成一个凹形碰撞形状。编辑器提供两个选项:
创建三网格静态体是个方便的选择. 它创建一个包含与网格几何学匹配的凹形的静态体。
创建Trimesh(三角面)碰撞同级 创建具有与网格几何体匹配的凹面形状的CollisionShape(碰撞形状)节点。
注意事项
每个PhysicsBody不限于一个碰撞形状。尽管如此, 我们还是建议尽量减少碰撞形状的数量以提高性能, 特别是对于像RigidBodies和KinematicBodies这样的动态对象. 除此之外, 避免translating(平移), rotating(旋转)或scaling(缩放)碰撞形状, 可以提高物理引擎运行效率。此外,避免碰撞对象下面还有碰撞体的这种结构。