Agent Skills
返回列表
🤖

Godot 物理引擎实战指南

AI Agent 更新于 2026.08.30

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

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

技能介绍

解决什么问题

在 Godot 4.3+ 项目里写物理,最常见的问题是:该用哪种物理体。地板用 StaticBody 还是 RigidBody?角色穿墙、触发器不触发、刚体一推就抖动,多半是碰撞层与掩码搞反了。该技能把 2D/3D 通用的物理决策流程整理成一套可执行的参考:从选体类型到射线检测,覆盖日常物理交互的完整链路。

核心能力

1. 选对 body 类型。 StaticBody 不参与模拟(地板、墙壁);RigidBody 受重力和冲量支配,不要直接改 position,而要用 apply_force / apply_impulse 或设 linear_velocity;Area 负责重叠检测,不做实体碰撞。每种体都必须挂 CollisionShape 子节点。

2. 配层与掩码。 层(layer)声明"我是什么",掩码(mask)声明"我检测什么"。A 要检测到 B,B 的层必须出现在 A 的掩码里,且检测可以是单向的——在 Project Settings > Layer Names 里命名层,能显著降低排查成本。

3. 重叠检测与刚体驱动。 用 Area 的 body_entered / area_entered 信号做触发器、受击框;对 RigidBody 施加力与冲量,或重写 _integrate_forces 拿完整控制力。

4. 两种射线方式。 每帧轮询 RayCast2D/3D 节点,或在代码里做一次性 intersect_ray 空间查询;用 query.exclude = [self.get_rid()] 排除自身。

适用边界

  • 运动学角色控制器(move_and_slide)交给 godot-2d-movement,Tilemap 碰撞交给 godot-tilemap,物理手感调参交给 physics-tuning。
  • 高频陷阱:直接改 RigidBody 的 position 会和求解器冲突,导致穿透或抖动——要么用冲量,要么进 _integrate_forces 里瞬移并清零速度。
  • Area 不触发通常是 monitoring / monitorable 没开,或层与掩码不重叠。
  • 射线数据要在 _physics_process 里读,同 tick 移动后需 force_raycast_update()。
  • 高速物体会穿薄墙,记得在 RigidBody 上开 continuous_cd 或改用射线检测。

使用场景

  • 给 2D 平台跳跃游戏搭地板和墙壁时,要选 StaticBody 还是 RigidBody,并挂上合适的 CollisionShape。
  • 做宝箱触发开箱动画时,用 Area2D 配置触发区域,并打通碰撞层与掩码让 body_entered 正常触发。
  • 实现炮塔射线锁定敌人时,需要在 _physics_process 里轮询 RayCast2D 或调用 intersect_ray 排除自身。
  • 处理高速子弹穿透薄墙时,要在 RigidBody 上开启 continuous_cd 或改用射线检测来兜底。

适合人员

  • 刚接触 Godot 4.3+ 的独立游戏开发者,卡在物理体类型选择与碰撞层配置上。
  • 正在开发 2D 动作游戏、需要做触发器和受击框的 gameplay 程序员。
  • 把 3D 原型迁到 Godot、想快速理清 RigidBody3D 受力和射线检测逻辑的客户端工程师。
  • 自学 Godot 的留学生,需要一份能对照代码排查层与掩码问题的技术参考。