mcpField
G
godot-physics-3d

godot-physics-3d

github.com/thedivergentai开发907416 次安装2 周前更新
代码仓库

关于 godot-physics-3d

面向 Godot 开发者的 3D 物理技能指南,按场景选择刚体、碰撞检测与模拟方案。提供配套脚本,涵盖阶梯移动、载具、布料、布娃娃和高速弹体,并强调避免常见物理错误。

主要功能

  1. 01按需求选择物理主体与 API
  2. 02CharacterBody3D 阶梯与地面检测
  3. 03载具、布娃娃和软体模拟
  4. 04高速弹体 CCD 与 RID 管理
  5. 05碰撞层配置与射线查询
  6. 06关节断裂和自定义重力

适用场景

  1. 01实现角色在阶梯和斜坡上的移动
  2. 02调试高速弹体穿透与碰撞问题
  3. 03构建载具、布娃娃或软体效果
  4. 04设计 3D 碰撞层和视线检测

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/thedivergentai/game-dev-agentic-skills --skill godot-physics-3d

安装后在 Claude Code 中输入/godot-physics-3d确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
expert-3d-constraints.md
migration-notes.md
scripts/
custom_gravity_well_3d.gd
hover_constraint_3d.gd
joint_3d_breakage_logic.gd
kinematic_3d_stairs_logic.gd
physics_ccd_3d_projectile.gd
physics_layers_3d_config.gd
physics_server_3d_bullets.gd
ragdoll_blender.gd
ragdoll_manager.gd
ray_query_3d_vision.gd
raycast_visualizer.gd
shapecast_3d_ground_check.gd
soft_body_3d_interaction.gd
vehicle_simulation_tuning.gd

详细介绍

3D 物理(Jolt/Native)

高性能 3D 模拟:刚体选择、CCD、台阶、载具、布娃娃、SoftBody——通过脚本实现。

绝对不要

  • 绝对不要在 _process() 中移动 PhysicsBody3D 节点——请使用 _physics_process()。在物理步之外移动刚体会导致画面抖动和碰撞检测不可靠 [12, 13]。
  • 绝对不要直接缩放碰撞形状——缩放物理形状会导致不稳定、法线不准确和抖动。请改用 shape 属性(高度、半径、尺寸)。
  • 绝对不要直接修改 RigidBody3D 变换——这会绕过物理求解器。请使用 apply_impulse()、apply_torque() 或 _integrate_forces() 回调进行安全操作 [17]。
  • 绝对不要将 RigidBody3D 用于平台游戏的玩家控制器——RigidBody 用于由物理驱动的物体。要实现精细的移动控制,请使用 CharacterBody3D 和 move_and_slide() [move_and_slide]。
  • 绝对不要让静态网格启用连续 CD(CCD)——这会大幅增加 CPU 开销。仅对高速小物体(子弹)启用,以防其穿过墙壁。
  • 绝对不要在未手动清理的情况下使用 PhysicsServer3D RID——RID 不会被垃圾回收。如果通过服务器创建刚体,完成后必须调用 free_rid(),以避免内存泄漏。
  • 绝对不要使用 RayCast3D 在台阶上精确检测地面——单条射线太细。请使用带圆柱体或球体形状的 ShapeCast3D,以可靠地检测可行走的台阶 [Stair Logic]。
  • 绝对不要依赖 VehicleBody3D 实现非赛车类的街机载具——它是复杂的模拟系统。对于街机气垫船或简单汽车,使用带射线检测的自定义 CharacterBody3D 通常更容易调校。
  • 绝对不要忘记正确设置 collision_layer 和 collision_mask——如果所有物体都在第 1 层,冗余检查会严重拖累性能。请对世界进行分类。
  • 绝对不要将 Area3D 用于高频阻挡——Area 用于检测。墙壁或屏障应使用 StaticBody3D,以确保即时且可靠地阻挡。

刚体 / 症状决策树

必须——编写移动或模拟代码前,先加载所选行对应的脚本。

不要为一个控制器加载所有物理脚本。

需求 / 症状刚体 / API脚本
玩家移动、台阶、斜坡CharacterBody3D必须 kinematic_3d_stairs_logic.gd + shapecast_3d_ground_check.gd
碎片、道具、冲量驱动的物体RigidBody3D绝对不要 + 冲量;通过 physics_layers_3d_config.gd 设置层
赛车 / 轮式模拟VehicleBody3D必须 vehicle_simulation_tuning.gd
街机气垫船 / 简单汽车自定义 CharacterBody3D + 射线优先使用台阶 / 射线脚本;避免使用完整的 VehicleBody
死亡 / 混合到物理姿势PhysicalBone3D / 骨架必须 ragdoll_manager.gd
斗篷、软布、柔软植被SoftBody3D必须 soft_body_3d_interaction.gd
穿透物体的子弹CCD / 服务器子弹必须 physics_ccd_3d_projectile.gd 或 physics_server_3d_bullets.gd
关节断开 / 可破坏物体Joint3D 应力joint_3d_breakage_logic.gd
重力井 / 零重力区域优先级custom_gravity_well_3d.gd
视线 / AI 视觉直接空间状态ray_query_3d_vision.gd
调试命中法线可视化工具raycast_visualizer.gd

3D 层的注意事项(并非 2D 入门指南)

  • 层 = 对象是什么;遮罩 = 对象会碰到什么。在 physics_layers_3d_config.gd 中为位命名。
  • 不要在此重复与 2D 相同的层教程;官方文档涵盖了共通的思维模型。

可用脚本

kinematic_3d_stairs_logic.gd

为 CharacterBody3D 实现程序化阶梯行走和贴合。

shapecast_3d_ground_check.gd

使用体积检测地面和台阶(射线会穿透)。

ragdoll_manager.gd

动画 → PhysicalBone 模拟的转换、冲量和清理。

vehicle_simulation_tuning.gd

VehicleBody3D / VehicleWheel3D 的街机模式与模拟模式调节项。

soft_body_3d_interaction.gd

SoftBody3D 标志、固定,以及 Jolt 质量/刚度调节。

physics_ccd_3d_projectile.gd

对小型高速刚体使用 CCD / 子步进防止穿透。

physics_server_3d_bullets.gd

大规模发射 RID 子弹,必须调用 free_rid()。

physics_layers_3d_config.gd

命名 3D 碰撞矩阵架构。

custom_gravity_well_3d.gd

行星 / 零重力 Area3D 重力优先级。

joint_3d_breakage_logic.gd

关节应力监测和程序化断裂。

ray_query_3d_vision.gd

底层视线 / AI 视觉查询。

raycast_visualizer.gd

在游戏中调试绘制射线命中点/法线。

专家提示(Jolt)

  • 除非需要特定节点的用户体验,否则优先使用 Generic6DOFJoint3D,而不是叠加专用关节。
  • 布娃娃、载具和软体示例都在上面的脚本中——不要在本文中扩展创建物理骨架的编辑器教程。
  • 特定版本的 Jolt / 软体升级步骤: migration-notes.md。

深入内容(按需阅读)

参考

渐进式披露:仅在研究特定 API 时打开官方文档链接; 将工作分配给相邻领域时再加载相关技能——不要预先加载整个技能网络。

官方文档
  • 物理简介 — 图层与掩码、物体类型,以及所有 3D 设置都依赖的 2D/3D 碰撞通用思维模型。
  • 碰撞形状(3D) — 基本形状与凸形/凹形的区别,以及缩放 CollisionShape3D 为何会破坏法线和接触。
  • 使用 Jolt Physics — 引擎切换、相较于 Godot Physics 的关节属性差异,以及稳定 3D 模拟所需注意的项目设置。
  • 使用 RigidBody — 通过力、冲量和 _integrate_forces 安全地控制物体,而不是每帧修改变换来对抗求解器。
  • 布娃娃系统 — 用于死亡模拟和动画↔物理切换的 PhysicalBoneSimulator3D / PhysicalBone3D 设置。
  • 使用 SoftBody3D — 布料/旗帜形变、固定点,以及 Jolt 为何更适合提升软体物理的稳健性。
  • 射线投射 — RayCast3D 与 PhysicsDirectSpaceState3D 查询、排除项,以及在物理帧期间访问空间。
  • 物理问题排查 — 隧穿、抖动、CCD 误用,以及常见的图层/掩码配置错误。
  • 物理插值简介 — 固定物理帧为何会在高刷新率显示器上出现卡顿,以及插值何时能平滑 3D 运动。
  • PhysicsServer3D — 基于 RID 的物体/形状 API,可用于群体规模的投射物,并且必须使用 free_rid 清理。
  • PhysicsDirectSpaceState3D — 用于视线检测、悬浮约束和自定义悬架的射线/形状/点查询,无需永久查询节点。
  • ShapeCast3D — 用于台阶/地面检测的体积投射,适合细窄的 RayCast3D 无法检测到边缘或不平整地面的情况。
相关技能
前置要求
  • godot-project-foundations — 必须先设置 3D 物理引擎选项、帧率、重力和具名图层位,才能合理设置矩阵和 Jolt 参数。
  • godot-gdscript-mastery — 类型化 RID、位掩码枚举和 _physics_process 使用规范,是本文服务器端与 CharacterBody3D 模式的基础。
  • godot-signal-architecture — body_entered / 接触监视器的连接需要清晰的所有权管理,以免 Area3D 重力井和 CCD 命中事件反复触发。
补充
  • godot-2d-physics — 在跨维度共享策略或移植机制时,配套参考层/掩码和物体类型契约。
  • godot-raycasting-queries — 当视觉/命中扫描系统超出基础需求时,深入了解查询参数的用法(掩码、排除项、形状投射)。
  • godot-3d-world-building — GridMap/CSG/网格的静态碰撞必须与角色和弹丸使用的同一套 3D 层矩阵保持一致。
  • godot-animation-tree-mastery — AnimationTree 姿势和状态机为 PhysicalBoneSimulator3D 提供布娃娃启动/停止和影响混合所需的信息。
  • godot-performance-optimization — 当 PhysicsServer3D 群集、软体或 CCD 数量成为瓶颈时,参考性能分析和对象池建议。
  • godot-debugging-profiling — 诊断抖动、穿透或台阶检测失败时,参考可视化碰撞形状、接触法线和性能分析器陷阱。
下游 / 使用方
  • godot-combat-system — 3D 命中箱/受击箱和弹丸 CCD 沿用此领域中的层/掩码及空间查询选择。
  • godot-genre-racing — VehicleBody3D 悬架/摩擦力调校和漂移手感会用到这里的车辆和 Jolt 指南。
  • godot-genre-shooter-fps — 命中扫描射线、CharacterBody3D 移动和高速弹丸 CCD 都会直接用到这些契约。
  • godot-navigation-pathfinding — Agent 仍需要物理层来处理阻挡物和视线(LOS);确保导航网格与碰撞世界保持一致。
  • godot-monte-carlo-balancer — 重力、CCD、关节断裂阈值和命中箱尺寸都会影响胜率;应模拟这些物理参数,而不是凭空猜测。
主入口
  • godot-master — 库路由器和镜像入口,用于查找 3D 物理及其相关领域。

评论

支持 Markdown