物理碰撞节点
最后同步日期:2026-04-15 | Godot 官方原文 — Physics
物理碰撞节点
物理系统是游戏世界的"物理老师"——它决定什么东西会掉下来、什么东西撞在一起、什么东西穿不过去。Godot 提供了一整套物理节点,让你不用自己写复杂的物理公式,就能做出真实的碰撞、弹跳、滑动效果。
打个比方:物理系统就像一个看不见的裁判。你在游戏里放了一块地板、一个球、一个玩家角色,这个裁判会自动判断"球该不该掉到地板上"、"玩家撞到墙该不该停下来"。
先理解一个核心概念
Godot 的物理节点分两大类:
- 物理体(CharacterBody、RigidBody、StaticBody、AnimatableBody)—— 它们有"实体",互相之间会碰撞、不会穿过对方
- 检测区域(Area2D/Area3D)—— 它们没有"实体",不会阻挡别的物体,但能"感知"到有东西经过了
节点继承关系图
下面这张图展示了所有物理相关节点之间的"家族关系"——谁从谁派生出来的。就像族谱一样,上面是"祖先",下面是"后代"。
节点总览
物理体(PhysicsBody)
物理体是游戏世界里"看得见、摸得着"的东西——它们有实体,互相之间会碰撞、不会穿过对方。
| 节点 | 说明 | 使用频率 |
|---|---|---|
| CharacterBody2D | 2D 角色物理体——你自己控制移动,引擎处理碰撞 | ★★★ |
| CharacterBody3D | 3D 角色物理体——你自己控制移动,引擎处理碰撞 | ★★★ |
| RigidBody2D | 2D 刚体——受物理引擎完全控制的物体 | ★★ |
| RigidBody3D | 3D 刚体——受物理引擎完全控制的物体 | ★★ |
| StaticBody2D | 2D 静态体——永远不动的物体(地板、墙壁) | ★★★ |
| StaticBody3D | 3D 静态体——永远不动的物体(地板、墙壁) | ★★★ |
| AnimatableBody2D | 2D 可动画物理体——通过动画移动但不影响其他物体 | ★ |
| AnimatableBody3D | 3D 可动画物理体——通过动画移动但不影响其他物体 | ★ |
| PhysicsBody2D | 2D 物理体抽象基类——不直接使用 | — |
| VehicleBody3D | 3D 车辆物理体——模拟汽车等载具 | ★ |
检测区域(Area)
检测区域没有实体,不会阻挡其他物体,但能感知到有东西经过了它。
| 节点 | 说明 | 使用频率 |
|---|---|---|
| Area2D | 2D 检测区域——感知物体进出 | ★★★ |
| Area3D | 3D 检测区域——感知物体进出 | ★★★ |
碰撞形状(CollisionShape / CollisionPolygon)
定义物理体和检测区域的碰撞边界——没有它们,物理引擎不知道你的物体长什么样。
| 节点 | 说明 | 使用频率 |
|---|---|---|
| CollisionShape2D | 2D 碰撞形状——用预设形状定义碰撞轮廓 | ★★★ |
| CollisionShape3D | 3D 碰撞形状——用预设形状定义碰撞轮廓 | ★★★ |
| CollisionPolygon2D | 2D 碰撞多边形——手动画点定义碰撞区域 | ★★ |
| CollisionPolygon3D | 3D 碰撞多边形——手动画点定义碰撞区域 | ★★ |
空间检测(RayCast / ShapeCast)
从某个位置投射一条线或一个形状,检测沿途碰到了什么。
| 节点 | 说明 | 使用频率 |
|---|---|---|
| RayCast2D | 2D 射线检测——投射一条线检测碰撞 | ★★ |
| RayCast3D | 3D 射线检测——投射一条线检测碰撞 | ★★ |
| ShapeCast2D | 2D 形状投射——投射一个形状检测碰撞 | ★ |
| ShapeCast3D | 3D 形状投射——投射一个形状检测碰撞 | ★ |
关节(Joint)
把两个物理体"绑"在一起,让它们以特定方式连接——像铰链、弹簧、绳子一样。
| 节点 | 说明 | 使用频率 |
|---|---|---|
| PinJoint2D | 2D 钉子关节——像用钉子把两个物体钉在一起 | ★ |
| PinJoint3D | 3D 点关节——两个物体围绕一个点旋转 | ★ |
| GrooveJoint2D | 2D 滑槽关节——物体沿一条槽滑动 | ★ |
| DampedSpringJoint2D | 2D 阻尼弹簧关节——弹性连接两个物体 | ★ |
| HingeJoint3D | 3D 铰链关节——像门的铰链 | ★ |
| SliderJoint3D | 3D 滑动关节——沿一条轴来回滑动 | ★ |
| ConeTwistJoint3D | 3D 锥形扭转关节——像球窝关节 | ★ |
| Generic6DOFJoint3D | 3D 六自由度关节——最灵活的关节 | ★ |
车辆与骨骼
| 节点 | 说明 | 使用频率 |
|---|---|---|
| VehicleBody3D | 3D 车辆物理体 | ★ |
| VehicleWheel3D | 3D 车辆车轮 | ★ |
| PhysicalBone3D | 3D 物理骨骼——用于布娃娃物理 | ★ |
| PhysicalBone2D | 2D 物理骨骼——用于 2D 布娃娃物理 | ★ |
节点选择指南
不知道该用哪个物理节点?跟着下面的流程图走一遍就知道了:
常见场景搭配
物理节点很少单独使用,通常需要搭配显示节点做外观、动画节点播动画。下面按具体场景逐一展示。
2D 平台角色
横版平台跳跃游戏中的玩家角色。CharacterBody2D 做移动碰撞 + Sprite2D 做外观 + AnimationPlayer 播动画。
2D 地板/墙壁
永远不动的固定物体。StaticBody2D 做碰撞 + TileMapLayer 做外观。
掉落的箱子/碎片
受物理引擎控制的物体。RigidBody 做物理模拟 + Sprite/Mesh 做外观。
拾取物品 / 伤害区域
不需要碰撞阻挡,只需检测物体进出。Area2D 做检测 + Sprite 做外观 + CollisionShape 做检测范围。
