Godot 游戏引擎指南/物理
物理在许多游戏中被用于许多不同的用途,例如坠落、撞墙、跳跃等等。
StaticBody2D 和 StaticBody3D
[编辑 | 编辑源代码]StaticBody 是一个碰撞体,它不打算移动。虽然它可以移动,但它不应用于角色。
静态体可以毫无问题地缩放。
它是速度最快的碰撞体类型。它应该用于环境和其他不可移动的事物。
RigidBody2D 和 RigidBody3D
[编辑 | 编辑源代码]RigidBody 是一个受重力影响的对象。它通常不用于角色,因为它很难控制,但可以在物理模拟游戏中使用,因为它非常准确。
它不能以任何方式缩放!
KinematicBody 是一个旨在通过脚本移动的物体。它也可以用作检测是否撞击物体或表面的方法。
运动学物体非常适合角色,但不应该用于模拟高级物理。
Area 可用于检测其他区域、刚体或运动学物体。重叠时会发出一个信号,当物体离开时也会发出另一个信号。
如果摄像机/音频监听器在区域内,则可以更改声音的效果。例如:跳入水中时,可以使汽车噪音变得沉闷。您可以通过更改“AudioBus”属性并选择总线来实现。您应该为此创建一个“沉闷”总线,并且audio_bus_override
必须设置为true
。(这是覆盖的默认音频总线,这意味着汽车噪音不能使用音频总线。它不会将总线叠加在其他总线之上)。
为了使碰撞物体与另一个物体发生碰撞,它需要一个或多个CollisionShape 或ColisionPolygon 子节点。CollisionShapes 需要定义一个对象来设置它们的形状和大小,而 CollisionPolygons 需要定义多个边(至少 3 个)。
每个物体都可以有遮罩和层级。如果至少一个遮罩等于重叠物体的层级,则这两个物体将被视为发生碰撞。这可以用来使玩家与地面、墙壁和敌人发生碰撞,但不能与其他玩家发生碰撞,或者仅与地面和墙壁发生碰撞。
每个层级可以在项目设置 -> 层级名称 -> 2d 物理和项目设置 -> 层级名称 -> 3d 物理中指定名称。这可以提高可读性,并减少出现错误的可能性。以下是一个示例
- 层级 1:世界(墙壁、地面、桥梁等)
- 层级 2:玩家
- 层级 3:敌人
- 层级 4:弹药
- 等等
如果您的 3D 游戏使用 SoftBody,您可以模拟当另一个物体与其碰撞时会发生变形的物体。这对斗篷和窗帘很有用。如果未使用,最好关闭项目设置 -> 物理 -> 3d -> 活动柔软世界以提高性能。
- 3D
- GodotPhysics:简单且功能强大。与某些碰撞形状不兼容。
- Bullet:默认引擎。不断检查碰撞,减少碰撞缺失,但性能成本更高。如果您的游戏包含快速移动的物体,例如赛车或子弹,请使用此引擎。
- 2D
- GodotPhysics:默认引擎。简单且功能强大。