首页/ 第 14 章 · 3D 游戏进阶/ 第 237 课
LESSON 237 · 3D 游戏进阶

3D 投掷物(手雷/弓箭)

投掷物完成。下一课做 3D 门与开关机制。

⏱ 约 14 分钟📊 难度:入门🗂 第 14 章 · 3D 游戏进阶📍 第 237 / 300 课
课程进度
237 / 300

🎯本节学习目标

  • 实现抛物线投掷
  • 实现引爆伤害
  • 实现弓箭飞行

🚀课程导读

“丢手雷”“射箭”——抛物线物理投掷。本课做投掷物系统。

手雷投掷

抛物线 + 引爆。

  1. 【投掷】给手雷初始速度(刚体+Impulse):
  2. public GameObject grenadePrefab; public Transform throwPoint;
  3. public float throwForce = 10f;
  4. void Throw() {
  5. GameObject g = Instantiate(grenadePrefab, throwPoint.position, throwPoint.rotation);
  6. Rigidbody rb = g.GetComponent<Rigidbody>();
  7. rb.AddForce(throwPoint.forward * throwForce, ForceMode.Impulse);
  8. }
  9. 【抛物线】重力自动让手雷走抛物线(第 233 课 AddForce+gravity)。
  10. 【引信】Grenade 脚本:
  11. public float fuse = 2.5f;
  12. void Update() { fuse -= Time.deltaTime; if (fuse <= 0) Explode(); }
  13. 【引爆】Explode():
  14. // 特效音效(第 200 课)
  15. ObjectPool.Instance.GetExplosion(transform.position);
  16. AudioManager.Instance.PlaySFX(boom);
  17. // 范围伤害
  18. Collider[] hits = Physics.OverlapSphere(transform.position, blastRadius);
  19. foreach (var c in hits) {
  20. Enemy e = c.GetComponent<Enemy>(); if (e != null) e.TakeDamage(50);
  21. }
  22. Destroy(gameObject);
  23. 【说明】OverlapSphere 范围内取碰撞体。
  24. 【测试】丢雷抛物线飞行、落地爆炸范围伤害。
  25. 【注意】别丢到自己(跳过玩家 tag)。
  26. 【完成】手雷“会炸”了!
💡
投掷 = 初始速度(抛物线)+ 引信计时 + OverlapSphere 范围伤害。三步。

弓箭与追踪弹

飞行的两种玩法。

  1. 【弓箭】箭矢有速度+碰撞:箭是刚体飞行物,命中时插在目标上:
  2. 箭脚本:rb.AddForce(forward * speed, Impulse);碰撞时(OnCollisionEnter)停住(isKinematic)+ 插在命中点。
  3. 【命中】射中敌人扣血+音效。
  4. 【追踪弹】导弹自动锁定目标:每帧朝目标转向:
  5. Vector3 dir = (target.position - transform.position).normalized;
  6. rb.velocity = dir * speed;
  7. 【锁定】目标为空时直线飞行(第 215 课追踪弹)。
  8. 【爆炸】追踪弹命中时范围爆炸(同手雷)。
  9. 【选择】即时命中(射线)vs 物理投射(投掷物)两种风格。
  10. 【适用】狙击=射线、手雷/弓箭=物理、导弹=追踪。
  11. 【测试】射箭插墙、导弹追目标。
  12. 【注意】高速投掷物 Collision Detection 设 Continuous(第 93 课)。
  13. 【完成】投掷物体系完整!
投掷物三型:抛物线(重力)、直飞(速度+碰撞)、追踪(每帧转向)。按需选用。

常见错误与排查

错误:手雷穿地?
原因:速度太快没开 Continuous 检测
解决:手雷 Rigidbody 的 Collision Detection 设 Continuous Dynamic。

动手练习

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

  • 实现手雷抛物线+范围伤害
  • 实现弓箭插墙
  • 实现追踪导弹

本节小结

投掷物完成。下一课做 3D 门与开关机制。

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

← 上一课3D 射击系统