Unity 物理引擎
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/unity-physics-w011 到当前 AI 助手。
技能介绍
要解决的问题
让场景里的物体真正"有重量"并不是给 Transform 写几行位移代码就完事的。你需要处理重力、碰撞推开、触发器检测、快速移动物体穿墙、层之间的交互过滤。这些细节散落在 Rigidbody、Collider、FixedUpdate 和 Project Settings 里,写错了往往表现为物体抖动、穿模或者回调不触发,而且很难一眼定位原因。
核心工作方式
这个技能把 Unity 6 内置物理(PhysX)的常规流程收敛成一套可复用的纪律:
- 组件分工:需要被模拟的物体加
Rigidbody,需要被命中的物体加Collider。一次有效碰撞要求双方都有 Collider,且至少一方有 Rigidbody。 - 物理放进
FixedUpdate:在Update里读输入、存意图,在FixedUpdate里施加力、设置linearVelocity或调用MovePosition。 - 只用物理 API 移动刚体:用
AddForce、linearVelocity、MovePosition,绝不直接给非运动学刚体赋值transform.position——那会让物体瞬移并跳过碰撞解算。 - 分清 collision 与 trigger:勾选 Is Trigger 的 Collider 会被穿透并触发
OnTriggerEnter;普通碰撞则会阻挡并回调OnCollisionEnter。 - 用层整理交互:给物体分层,并在 Project Settings → Physics 里编辑 Layer Collision Matrix,避免无关物体互相检测。
- 验证手段:用 Physics Debugger 检查,快速物体穿墙时把 Collision Detection 调成 Continuous 或 Continuous Dynamic。
常见坑
几个最容易踩的:直接给动态刚体写 transform.position 导致穿模;在 Update 里施力导致帧率相关的抖动;两个静态 trigger Collider 之间不会上报重叠;非均匀缩放的 MeshCollider 行为异常;忘记 Unity 6 把 Rigidbody.velocity 改名为 linearVelocity,老教程代码会编译告警。
适用边界
这套内容只覆盖 Unity 6(6000.0 LTS)的 3D 物理。2D 用的是 Rigidbody2D / Collider2D 独立 API,概念相通但类型不同。手感调优(固定步长、抖动、CCD 稳定性)交给 physics-tuning,输入驱动移动交给 unity-input-system,都不是这个技能的目标。
使用场景
- 在 Unity 6 中给主角加跳跃力并限制速度,需要区分 ForceMode.Impulse 与 ForceMode.VelocityChange。
- 两个静态物体的 trigger 始终不触发 OnTriggerEnter,需要排查是否缺 Rigidbody 或 Collider 未启用。
- 子弹等高速物体穿过墙壁,需要把 Collision Detection 调成 Continuous Dynamic。
- 大量物体互相检测碰撞导致性能浪费,需要在 Layer Collision Matrix 中裁剪无关层的交互。
适合人员
- Unity 6 客户端工程师,需要在新场景里为可交互物体正确组合 Rigidbody 与 Collider。
- 玩法系统程序员,正在编写基于碰撞与触发回调的伤害判定或机关逻辑。
- 技术美术或性能工程师,在排查刚体抖动、穿模与层交互过度检测的原因。