首页/ 第 7 章 · 物理系统/ 第 94 课
LESSON 94 · 物理系统

给物体施加力 AddForce

AddForce 已掌握。下一课学扭矩与角速度。

⏱ 约 14 分钟📊 难度:入门🗂 第 7 章 · 物理系统📍 第 94 / 300 课
课程进度
94 / 300

🎯本节学习目标

  • 掌握 AddForce 语法
  • 理解 ForceMode 四种模式
  • 用受力实现推进/爆炸

🚀课程导读

AddForce 让刚体“被推一把”。理解四种力的模式,才能做出想要的物理效果。

AddForce 基础

给刚体一个“推力”。

  1. 语法:rb.AddForce(Vector3 方向 * 力度);
  2. 例:rb.AddForce(Vector3.up * 500f); 把物体向上推。
  3. 【执行位置】物理相关放 FixedUpdate 里(第 72 课)。
  4. 【四种模式 ForceMode】
  5. ForceMode.Force(默认):持续的力,随质量影响,适合推进、持续加速。
  6. ForceMode.Acceleration:持续加速度(忽略质量),适合统一加速。
  7. ForceMode.Impulse:瞬间冲量(一次性猛推),适合跳跃、爆炸、开枪后坐力。
  8. ForceMode.VelocityChange:瞬间速度改变(忽略质量),适合直接设定速度变化。
  9. 【选择】一次性“撞飞”用 Impulse;持续“推走”用 Force。
  10. 【质量影响】Force 与 Impulse 受质量影响:质量大的物体被同样的力推动得慢。
  11. 【方向】可以是世界方向(Vector3.up)或自身方向(transform.forward)。
💡
理解重点:Impulse 像“踢一脚”,Force 像“一直推”,二者手感完全不同。

实战:跳跃与加农炮

体验不同模式。

  1. 【跳跃(Impulse)】在 Player 脚本里:if (Input.GetKeyDown(KeyCode.Space)) { GetComponent<Rigidbody>().AddForce(Vector3.up * 8f, ForceMode.Impulse); }
  2. 注意:跳跃力要能克服重力,8-10 较合适;落地后还要允许再跳(判断在地面)。
  3. 【持续推进(Force)】给火箭做推进:rb.AddForce(transform.up * 50f, ForceMode.Force); 放 FixedUpdate 里,火箭持续上升。
  4. 【爆炸(Impulse 方向)】给物体一个随机方向的爆炸力:rb.AddForce(dir * power, ForceMode.Impulse); dir 是“从爆炸点到物体”的方向。
  5. 【对比】同一力度分别用 Force 与 Impulse,观察物体被“持续推”与“瞬间撞飞”的差异。
  6. 【注意】力的方向尽量单位化再乘力度,避免斜向力过大。
跳跃 = Impulse 一次性冲量;火箭 = Force 持续推力。牢记两种模式的差别。

常见错误与排查

错误:物体没被推动?
原因:力太小或对象无刚体
解决:确认有 Rigidbody;把力调大;确认在 FixedUpdate 里调用。

动手练习

课后小任务(做出来才算真的学会)

  • 用 Impulse 做一个能跳的方块
  • 用 Force 做一个持续上升的火箭(可乘 Time.fixedDeltaTime)
  • 对比四种 ForceMode 的效果差异

本节小结

AddForce 已掌握。下一课学扭矩与角速度。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课物理材质 Physic Material