U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 14 章 · 3D 游戏进阶
/
第 237 课
LESSON 237 · 3D 游戏进阶
3D 投掷物(手雷/弓箭)
投掷物完成。下一课做 3D 门与开关机制。
⏱ 约 14 分钟
📊 难度:
入门
🗂 第 14 章 · 3D 游戏进阶
📍 第 237 / 300 课
课程进度
237 / 300
🎯
本节学习目标
实现抛物线投掷
实现引爆伤害
实现弓箭飞行
🚀
课程导读
“丢手雷”“射箭”——抛物线物理投掷。本课做投掷物系统。
◆
手雷投掷
抛物线 + 引爆。
【投掷】给手雷初始速度(刚体+Impulse):
public GameObject grenadePrefab; public Transform throwPoint;
public float throwForce = 10f;
void Throw() {
GameObject g = Instantiate(grenadePrefab, throwPoint.position, throwPoint.rotation);
Rigidbody rb = g.GetComponent<Rigidbody>();
rb.AddForce(throwPoint.forward * throwForce, ForceMode.Impulse);
}
【抛物线】重力自动让手雷走抛物线(第 233 课 AddForce+gravity)。
【引信】Grenade 脚本:
public float fuse = 2.5f;
void Update() { fuse -= Time.deltaTime; if (fuse <= 0) Explode(); }
【引爆】Explode():
// 特效音效(第 200 课)
ObjectPool.Instance.GetExplosion(transform.position);
AudioManager.Instance.PlaySFX(boom);
// 范围伤害
Collider[] hits = Physics.OverlapSphere(transform.position, blastRadius);
foreach (var c in hits) {
Enemy e = c.GetComponent<Enemy>(); if (e != null) e.TakeDamage(50);
}
Destroy(gameObject);
【说明】OverlapSphere 范围内取碰撞体。
【测试】丢雷抛物线飞行、落地爆炸范围伤害。
【注意】别丢到自己(跳过玩家 tag)。
【完成】手雷“会炸”了!
💡
投掷 = 初始速度(抛物线)+ 引信计时 + OverlapSphere 范围伤害。三步。
◆
弓箭与追踪弹
飞行的两种玩法。
【弓箭】箭矢有速度+碰撞:箭是刚体飞行物,命中时插在目标上:
箭脚本:rb.AddForce(forward * speed, Impulse);碰撞时(OnCollisionEnter)停住(isKinematic)+ 插在命中点。
【命中】射中敌人扣血+音效。
【追踪弹】导弹自动锁定目标:每帧朝目标转向:
Vector3 dir = (target.position - transform.position).normalized;
rb.velocity = dir * speed;
【锁定】目标为空时直线飞行(第 215 课追踪弹)。
【爆炸】追踪弹命中时范围爆炸(同手雷)。
【选择】即时命中(射线)vs 物理投射(投掷物)两种风格。
【适用】狙击=射线、手雷/弓箭=物理、导弹=追踪。
【测试】射箭插墙、导弹追目标。
【注意】高速投掷物 Collision Detection 设 Continuous(第 93 课)。
【完成】投掷物体系完整!
✅
投掷物三型:抛物线(重力)、直飞(速度+碰撞)、追踪(每帧转向)。按需选用。
⚠
常见错误与排查
⛔
错误:
手雷穿地?
原因:
速度太快没开 Continuous 检测
解决:
手雷 Rigidbody 的 Collision Detection 设 Continuous Dynamic。
★
动手练习
课后小任务(做出来才算真的学会)
实现手雷抛物线+范围伤害
实现弓箭插墙
实现追踪导弹
✓
本节小结
投掷物完成。下一课做 3D 门与开关机制。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
3D 射击系统
下一课 →
3D 门与开关机制
↑