Agent Skills
返回列表
💻

Godot 4 物理与碰撞

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/godot-physics-sh-vw1zla。

技能介绍

要解决什么问题

在 Godot 4.x 里做 2D/3D 玩法时,物理相关 bug 往往集中在几类:该用哪种 Body、碰撞层和遮罩为什么对不上、触发区不触发、刚体被直接改 position 后抖动穿模,以及 射线读到过期结果。本技能面向 Godot 4.3+,把 2D/3D 共用的一套概念讲清楚(节点名换 2D/3D 后缀即可)。

技能如何帮你落地

核心流程可以按五步记:

  1. 选物理体类型:StaticBody 做静态挡板;RigidBody 交给模拟(力/冲量或 linear_velocity,别硬拽位置);CharacterBody 走脚本驱动的运动学(细节见 godot-2d-movement);Area 做重叠检测并可施加重力/阻尼,没有实体碰撞。每个 Body 都需要子节点 CollisionShape 或 CollisionPolygon。
  2. 配 layers 与 masks:Body 在 layer 上声明「我是谁」,用 mask 声明「我找谁」;只有一方的 layer 落在另一方 mask 里才会交互。建议在 Project Settings > Layer Names 里命名层,避免后期对表困难。
  3. 用 Area 信号(body_entered、area_entered)处理触发器、受击框等重叠逻辑。
  4. 驱动 RigidBody:apply_force / apply_impulse,或重写 _integrate_forces 做完整控制。
  5. 射线检测:挂 RayCast2D/RayCast3D 每帧轮询,或在代码里用 space state 做一次查询。

文中还给出从代码设置层遮罩、Area 作 hurtbox、3D 刚体施力、两种 raycast 写法等 Patterns,并单列 Pitfalls(layer/mask 方向性、Area 的 monitoring/monitorable、同帧移动 RayCast 后需 force_raycast_update()、薄墙高速穿透与 continuous_cd、射线排除自身需 query.exclude = [self.get_rid()] 等)。

适用边界

  • 不要用本技能替代:角色 move_and_slide 运动学控制器 → godot-2d-movement;瓦片碰撞搭建 → godot-tilemap;时间步、质量、手感调参 → physics-tuning。
  • 关节、单向碰撞、PhysicsServer 直连、形状查询、move_and_collide 等进阶内容见技能内 references/bodies-and-queries.md。

使用场景

  • 在 Godot 4 横版关卡里为敌人挂 `Area2D` 受击框,用 `body_entered` 判定玩家攻击是否命中
  • 新项目上线前统一命名碰撞层,并给玩家、子弹、地形分别设置 layer 与 mask,避免误碰撞
  • 平台跳跃角色落地前用 `RayCast2D` 或 space state 射线做地面检测,防止空中误判
  • 可拾取道具做成 `RigidBody3D`,用冲量抛出并在薄墙场景里评估是否开启 `continuous_cd`

适合人员

  • 独立开发者:用 Godot 4 做 2D/3D 原型,需要在 Static/Rigid/Character/Area 之间选型并接上碰撞形状
  • 关卡设计师兼脚本:同一场景里要配置多层碰撞关系,但 layer 与 mask 经常对不上导致「打不中」
  • 刚体玩法程序员:道具、箱子等 `RigidBody` 被直接改 `position` 后出现抖动穿模,想改成力/冲量或 `_integrate_forces`
  • 技术向策划或 TA:要为视线、地面、斜坡做射线查询,并处理同帧移动 RayCast 后读到过期命中