Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

物理介绍

在游戏开发中, 你经常需要知道游戏中的两个对象在何时相交或接触. 这被称为 碰撞检测 . 检测到碰撞时, 你通常希望某些事情发生. 这被称为 碰撞响应 .

Godot在2D和3D中提供了许多碰撞对象, 以提供碰撞检测和响应. 你可能很难决定哪个适合你的项目. 一旦了解了每种方法的工作原理以及它们的优缺点, 你就可以避免出现问题并简化开发过程.

在本指南中,你将学会:

  • Godot的四种碰撞对象类型

  • 每个碰撞对象的工作原理

  • 何时以及为何选择这种类型而不是另一种类型

备注

本文档的示例将使用2D对象. 每个2D物理对象和碰撞形状在3D中具有直接等价物, 并且在大多数情况下它们以相同的方式工作.

碰撞物体

Godot 提供了四种碰撞对象,它们都继承自 CollisionObject2D。 下面列出的最后三种是物理物体,此外还继承了 PhysicsBody2D

  • Area2D

    Area2D 节点提供 检测影响 . 它们可以检测物体何时重叠, 并在物体进入或离开时发出信号. Area2D 也可用于覆盖物理属性, 例如一定区域内的重力或阻尼.

  • StaticBody2D

    静态主体是物理引擎不移动的主体. 它参与碰撞检测, 但不会响应碰撞而移动. 它们通常用于属于环境的对象或不需要任何动态行为的对象.

  • RigidBody2D

    这是实现模拟2D物理的节点. 你不直接控制 RigidBody2D , 而是你对它施加力(重力, 冲动等), 物理引擎计算得到的运动. 阅读更多关于使用刚体的信息.

  • CharacterBody2D

    提供碰撞检测的物体, 但没有物理特性. 所有移动和碰撞响应必须在代码中实现.

物理材质

静态体和刚性体可以配置为使用 物理材质 。这允许调整物体的摩擦和弹性,并设置是否具有吸收性、粗糙性。

碰撞形状

物理体可以包含任意数量的 Shape2D 对象作为子对象. 这些形状用于定义对象的碰撞边界并检测与其他对