物理模拟调参
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/physics-tuning-sh-uid75d。
技能介绍
先明确要解决什么问题
很多"物理手感差"并不是引擎的 bug,而是固定时间步的物理模拟与可变帧率的渲染循环之间的错配,或者是质量、阻力、CCD、碰撞层这类参数没调好。典型症状包括:
- 物体抖动、穿墙(tunneling)、堆叠炸开
- 移动发飘、发黏、迟滞
- 不同帧率下行为不一致
技能如何工作
这套流程不绑定引擎,提供的是一套可通用的调参思路:
- 固定时间步模拟:以恒定速率(如 50–60 Hz)推进物理,保证确定性与稳定性
- 物理逻辑放进物理回调:在
FixedUpdate/_physics_process中施加力、改速度、读取碰撞,而不是在渲染帧里做 - 渲染插值:在两次物理 tick 之间插值变换,或开启引擎自带的 Rigidbody 插值,消除可见卡顿
- 调刚体而不是调场景:用质量定义相对重量、阻力定义阻尼、
gravity_scale做手感,用材质调弹性与摩擦 - 防穿墙:小而快的物体开启 CCD,同时封顶最大速度
- 稳定堆叠:提高求解器迭代次数、保持合理的质量比、让静止物体休眠
- 手感验证 + 压力测试:低帧率和高帧率下都玩一遍,拿快物体砸薄墙,堆叠和推挤刚体,记录观察结果
几个被验证过的模式:固定步长 + 渲染插值;CCD + 限速;刚体参数调优;碰撞层与掩码矩阵。
适用边界与注意点
- 需要引擎具体的物理节点、碰撞体和回调 API 时,请配合
godot-physics或unity-physics使用 - 跳跃时机、AI 转向这类移动决策属于
input-systems和game-ai的范畴;土狼时间、跳跃缓冲这类平台跳跃手感更是控制器领域的事
常见坑:在渲染帧(Update / _process)里施加力会让行为依赖帧率;固定步长下仍然抖动通常是没开渲染插值;穿薄墙需要 CCD、限速或加厚墙体;重物不会掉得更快——重力是加速度,质量只影响碰撞响应;堆叠炸开往往是质量比悬殊或迭代次数太少;不休眠的刚体持续烧 CPU;碰撞层要双向核对,A 的掩码含 B 不等于 B 的掩码含 A;大 dt 尖峰要钳制最大物理步长。
使用场景
- 刚体行为依赖帧率,需要在 `FixedUpdate` / `_physics_process` 中施加力并读取碰撞。
- 堆叠箱子被推就炸开,需要调整质量比、提高求解器迭代,并让静止物体休眠。
- 小而快的物体穿过薄墙,需要开启 CCD、封顶最大速度,或加厚墙体。
- 碰撞层掩码配置不完整,需要核对角色、地板、传感器和子弹之间的双向碰撞关系。
适合人员
- gameplay 程序员:需要让物理在高帧率与低帧率下表现一致
- 技术美术:需要定位固定时间步、渲染插值和刚体参数问题
- 独立游戏开发者:没有专职物理工程师,需要引擎无关的调参清单
- Godot 或 Unity 游戏程序员:需要不绑定具体引擎的物理工作流