Unity 3D 物理引擎
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/unity-physics-sh-t9p516。
技能介绍
要解决什么问题
在 Unity 6 里给物体加重力、施力、碰撞反馈时,很容易踩到帧率相关的抖动、刚体被 transform.position 瞬移穿透、触发器不回调、高速物体穿墙等问题。本技能围绕内置 PhysX 3D 物理(Rigidbody + Collider),把 FixedUpdate 纪律、碰撞与触发器语义、以及 Layer Collision Matrix 讲清楚,目标版本是 Unity 6 (6000.0 LTS)。
技能如何组织工作流
核心步骤可以概括为:
- 需要被模拟的物体挂 Rigidbody;需要被命中的物体挂 Collider(双方都要有 Collider,且至少一侧有 Rigidbody)。
- 输入在
Update读,物理在FixedUpdate做:存意图后,用AddForce、linearVelocity或MovePosition驱动,不要在Update里施力。 - 不要用 Transform 直接改动态刚体位置;运动应走物理 API,否则碰撞解算会被跳过。
- Solid collision 会阻挡并触发
OnCollisionEnter;勾选 Is Trigger 的 Collider 可穿透并走OnTriggerEnter。 - 用 Physics Layer 裁剪无关碰撞对,必要时用带 LayerMask 的射线做地面检测;复杂射线与关节细节可对照技能内 references。
技能还给出典型模式:FixedUpdate 里带速度钳制的力驱动移动、碰撞/触发回调、地面射线、以及仍能推挤其它刚体的 kinematic 平台。
适用边界与注意点
- Unity 6 重命名:
Rigidbody.velocity已弃用,应使用Rigidbody.linearVelocity;旧教程代码可能无法编译或报警。 - 2D 物理(
Rigidbody2D/Collider2D)是另一套 API,概念可借鉴但类型不同。 - 触发器要生效:至少一侧需 Rigidbody,且两侧 Collider 启用;两个静态触发器不会报告重叠。
- 高速穿透(tunneling)可把 Collision Detection 设为 Continuous / Continuous Dynamic;非均匀缩放的 MeshCollider 易出问题,优先 primitive 并保持 uniform scale。
- 手感与步长、抖动、CCD 等跨引擎调参 → 相关 physics-tuning;纯输入驱动移动 → unity-input-system;非力驱动的寻路移动 → unity-navmesh。
使用场景
- 在 Unity 6 LTS 关卡里给可推动物体挂 Rigidbody,用 FixedUpdate 的 AddForce 做移动并钳制最大速度
- 玩家跳跃前用带 LayerMask 的 Physics.Raycast 做地面检测,避免 Update 里直接改 transform.position
- 拾取区、伤害盒设为 Is Trigger 后 OnTriggerEnter 不触发时,按技能清单核对 Rigidbody 与 Collider 启用关系
- 子弹或高速物体穿墙时,把 Rigidbody 的 Collision Detection 改为 Continuous 并收紧物理层矩阵
适合人员
- 维护 Unity 6(6000 LTS)玩法代码、要把输入读入与 PhysX 施力严格拆到 Update / FixedUpdate 的游戏程序员
- 搭建含 Rigidbody + Collider 的 Prefab,需要通过 Physics Layer 与碰撞矩阵降低无关碰撞开销的关卡或技术美术
- 从 Unity 5/旧教程迁移项目、遇到 velocity 弃用告警并需统一改用 linearVelocity 的 Unity C# 维护者
- 做可移动平台或关节玩法时,需要区分 solid collision 与 trigger 回调,并查阅射线与 Joint 参考的玩法系统工程师