2026/8/18 19:02:54

游戏开发必懂:刚体模拟全解析

游戏开发必懂:刚体模拟全解析 开场一个扔个箱子却穿墙的困惑小王想让一个箱子从空中掉下来、砸地上弹一下、滚两圈停住。他手动写代码控制位置结果箱子穿墙、卡地里、运动僵硬……“手动算物体运动太难了重力、碰撞、弹跳、摩擦……老鸟说加个 Rigidbody 让’刚体模拟’来算就行。可刚体模拟到底是什么它帮我算了什么刚体’又是啥意思”老鸟说“刚体模拟就是物理引擎的核心工作——模拟真实世界物体的运动规律你不用手动算它自动帮你算重力、碰撞、弹跳、摩擦……刚体’是个专门的概念今天从头讲清楚” 第一幕先理解刚体是什么刚体的定义刚体(Rigid Body) 一个不会变形的理想物体 ↓ 意思是: 无论受多大力、怎么碰撞 它的形状永远不变! ↓ 比如: 一块石头、一个箱子、一个球 → 撞了也不变形(理想化)为什么叫刚体刚 坚硬、不变形 刚体 vs 软体 刚体: 石头、金属块(不变形) 软体: 布料、果冻、橡皮(会变形) ↓ 刚体模拟只处理不变形的物体 → 计算简单很多!为什么要假设不变形真实物体撞击时其实会微微变形 → 但精确模拟变形超级复杂! ↓ 游戏里假设刚体不变形: → 大大简化计算 → 大部分场景够用(箱子、球、角色) ↓ 这是一种合理的简化!生动理解刚体刚体像一块坚硬的积木 积木掉地上、撞墙、滚动 → 形状始终不变 ↓ 刚体模拟只需算它的: 位置、旋转、速度 → 不用算变形 → 简单! 第二幕刚体模拟在算什么⭐刚体模拟的核心工作刚体模拟每帧帮你算 ① 受力: 重力、你施加的力、碰撞的力 ↓ ② 加速度: 力 → 加速度(Fma) ↓ ③ 速度: 加速度 → 更新速度 ↓ ④ 位置/旋转: 速度 → 更新位置和转动 ↓ ⑤ 碰撞响应: 撞到东西 → 弹开/停下 ↓ 全自动! 你只管加Rigidbody!具体模拟的物理现象刚体模拟自动处理 ✅ 重力(往下掉) ✅ 惯性(动起来不易停) ✅ 碰撞(撞到东西弹开/停下) ✅ 弹跳(反弹) ✅ 摩擦(慢慢停下) ✅ 旋转(受力偏心会转) ✅ 堆叠(箱子叠起来) ↓ 这些真实世界的运动规律 → 引擎全帮你算!生动理解模拟工作刚体模拟像一个懂物理的助手 你说这箱子有重力、会碰撞(加Rigidbody) 助手自动算: 现在受重力 → 往下掉 撞到地面 → 弹一下 有摩擦 → 慢慢停 受力偏了 → 转起来 ↓ 你啥都不用算,助手全包了! 第三幕Unity 里怎么用刚体加 Rigidbody 组件给物体加Rigidbody组件 → 这个物体就交给刚体模拟了! ↓ 它会自动: - 受重力下落 - 和其他碰撞体碰撞 - 遵循物理规律运动 ↓ 配合Collider(碰撞体)一起用!刚体 碰撞体的配合✅ 刚体模拟需要两个组件配合 Rigidbody(刚体): → 负责运动(受力、速度、位置) Collider(碰撞体): → 负责形状(碰撞检测用) ↓ Rigidbody Collider 完整的物理物体!简单代码示例usingUnityEngine;publicclassThrowBox:MonoBehaviour{Rigidbodyrb;voidStart(){rbGetComponentRigidbody();}voidUpdate(){if(Input.GetKeyDown(KeyCode.Space)){// 给刚体施加一个向上的力rb.AddForce(Vector3.up*500);// ↑ 之后的下落、碰撞全交给刚体模拟!}}}你只管施力(AddForce) 之后的运动全是刚体模拟自动算!生动理解使用用刚体像雇了个物理助手 加Rigidbody 雇助手 加Collider 告诉助手物体形状 你AddForce 给个初始推力 ↓ 之后掉落、碰撞、弹跳、停下 → 助手(刚体模拟)全自动处理! 第四幕刚体的关键参数常用参数Rigidbody的关键参数 ① Mass(质量): 物体多重 → 影响受力后的加速度 ② Drag(阻力): 移动阻力 → 越大越快停下(像空气阻力) ③ Angular Drag(角阻力): 旋转阻力 → 越大转动越快停 ④ Use Gravity(使用重力): → 是否受重力 ⑤ Is Kinematic(运动学): → 勾选后不受物理影响,只手动控制Is Kinematic 的特殊性✅ Is Kinematic true: 刚体不受物理模拟控制 → 不受力、不受重力 → 只能用代码手动移动 ↓ 用于: 需要精确控制、又想参与碰撞的物体 (如移动平台、被脚本控制的门)生动理解参数参数像调助手的行为 Mass → 物体多重(影响推得动不动) Drag → 阻力多大(多快停下) Use Gravity → 要不要重力 Is Kinematic → 我自己控制,你别管运动 ↓ 调这些让物理表现符合需求! 第五幕刚体模拟 vs 手动控制两种方式对比方式1: 刚体模拟(Rigidbody) → 引擎算物理,真实自然 → 适合: 需要物理效果的 (掉落、碰撞、弹跳、堆叠) 方式2: 手动控制Transform → 自己写代码改位置 → 适合: 需要精确控制的 (角色移动、UI动画) ↓ 按需选择!什么时候用刚体模拟✅ 适合刚体模拟 - 掉落的物品 - 抛射物(手雷、球) - 可推动的箱子 - 破碎的碎片 - 需要真实碰撞弹跳的 ↓ 想要真实物理表现 → 用刚体!什么时候不用⚠️ 不适合纯刚体模拟 - 玩家角色精确移动 (常用CharacterController或Kinematic) - UI动画 - 需要精确路径的 ↓ 要精确控制 → 手动或Kinematic!生动理解选择选择像要真实还是要掌控 要真实自然(掉落弹跳) → 交给刚体模拟 要精确掌控(角色走位) → 自己控制 ↓ 物理效果用刚体,精确控制用手动!⚙️ 第六幕刚体模拟的运行时机在 FixedUpdate 运行⚠️ 关键: 刚体模拟在FixedUpdate运行 → 固定时间间隔(默认每秒50次) ↓ 所以操作刚体的力,要在FixedUpdate里!// ✅ 对刚体施力在FixedUpdatevoidFixedUpdate(){rb.AddForce(Vector3.forward*10);// ↑ 和物理模拟同步,稳定!}// ❌ 在Update里施力可能不稳定为什么固定频率物理模拟需要稳定的时间步长 → 才能算得稳定、准确 ↓ 所以用FixedUpdate(固定频率) 而非Update(帧率变化) ↓ 保证物理表现一致!生动理解时机刚体模拟像按固定节拍工作的助手 助手每隔固定时间(FixedUpdate)算一次物理 → 你要指挥它(施力)也得跟着节拍 ↓ 在FixedUpdate里操作刚体最稳!✅ 刚体模拟理解检查清单基础概念 □ 明白刚体是不变形的理想物体⭐ □ 明白为什么假设不变形(简化计算) □ 明白刚体模拟算物体运动 模拟内容 □ 知道它算重力/惯性/碰撞/弹跳/摩擦/旋转⭐ □ 明白你只管施力,运动全自动 使用 □ 知道加Rigidbody组件 □ 知道要配Collider碰撞体 □ 会用AddForce施力 参数 □ 知道Mass/Drag/Use Gravity □ 明白Is Kinematic是自己控制 时机 □ 知道物理在FixedUpdate运行⭐ □ 知道施力要在FixedUpdate 选择 □ 知道物理效果用刚体、精确控制用手动 一句话总结刚体模拟是什么“刚体指的是不会变形的理想物体”如石头、箱子、球无论受多大力、怎么碰撞形状都不变——这是一种简化假设因为精确模拟变形太复杂而不变形的假设让计算大大简化且大部分场景够用。刚体模拟就是物理引擎的核心工作——自动模拟真实世界物体的运动规律算受力重力、你施加的力、碰撞力→ 算加速度 → 算速度 → 算位置和旋转 → 处理碰撞响应弹开/停下。它自动帮你处理重力、惯性、碰撞、弹跳、摩擦、旋转、堆叠这些物理现象你完全不用手动计算在 Unity 里给物体加 Rigidbody 组件负责运动 Collider 组件负责形状/碰撞物体就交给刚体模拟了你只管用 AddForce 施力之后的掉落、碰撞、弹跳全自动。关键参数Mass质量、Drag阻力、Use Gravity重力、Is Kinematic勾选后不受物理、只手动控制。重要时机物理模拟在 FixedUpdate固定频率运行所以对刚体施力要写在 FixedUpdate 里才稳定选择想要真实物理表现掉落弹跳用刚体模拟想要精确控制角色走位用手动控制。核心口诀刚体是不变形的理想物体刚体模拟自动算重力惯性碰撞弹跳摩擦旋转加RigidbodyCollider你只管施力参数调Mass阻力重力Kinematic物理在FixedUpdate跑施力也在那物理效果用刚体精确控制用手动 刚体模拟速查表概念说明刚体不变形的理想物体⭐为何不变形简化计算,够用刚体模拟自动算物体运动算什么重力/惯性/碰撞/弹跳/摩擦/旋转需要组件Rigidbody Collider施力AddForce关键参数Mass/Drag/Gravity/Kinematic运行时机FixedUpdate(固定频率)⭐适用真实物理效果不适用精确控制(用手动/Kinematic) 一句话记住核心刚体 不变形的理想物体刚体模拟 引擎自动算它的运动重力/碰撞/弹跳/摩擦。加 Rigidbody Collider你只管 AddForce其余全自动。物理在 FixedUpdate 跑施力也在那真实物理用刚体、精确控制用手动 延伸从刚体模拟看物理引擎全景【刚体模拟是物理引擎的核心之一】 物理引擎的完整能力 ① 刚体模拟(Rigid Body): ← 本篇 不变形物体的运动 ② 碰撞检测(Collision): 谁和谁撞了(配合刚体) ③ 关节/约束(Joint): 链条、绳子、铰链、弹簧 ④ 触发器(Trigger): 检测进入区域(不产生碰撞力) ⑤ 物理查询(Raycast等): 射线检测、区域检测 ⑥ 软体/布料(进阶): 会变形的物体(更复杂) ↓ 刚体模拟是物理的基础 → 理解它 → 理解物理引擎的核心! ↓ 延伸: 这些都在FixedUpdate运行 都是CPU优化要关注的对象!