U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 14 章 · 3D 游戏进阶
/
第 236 课
LESSON 236 · 3D 游戏进阶
3D 射击系统
3D 射击完成。下一课做投掷物。
⏱ 约 15 分钟
📊 难度:
入门
🗂 第 14 章 · 3D 游戏进阶
📍 第 236 / 300 课
课程进度
236 / 300
🎯
本节学习目标
实现射线射击
实现伤害判定
实现命中反馈
🚀
课程导读
3D 射击的“打没打中”用射线判定(即时命中)。本课做完整的射击与反馈。
◆
射线射击(Raycast)
准星到命中点。
【思路】从准星发一条射线,命中的地方=着弹点(即时命中,无需子弹)。
【脚本 Gun】
public float range = 100f; public LayerMask hitMask;
public Transform firePoint;
void Update() {
if (Input.GetMouseButtonDown(0)) Fire();
}
void Fire() {
Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2, 0));
RaycastHit hit;
if (Physics.Raycast(ray, out hit, range, hitMask)) {
// 命中伤害
Enemy enemy = hit.collider.GetComponent<Enemy>();
if (enemy != null) enemy.TakeDamage(20);
// 弹孔/火花特效
Instantiate(bulletHole, hit.point, Quaternion.LookRotation(hit.normal));
}
// 枪口火光+音效
muzzleFlash.Play(); AudioManager.Instance.PlaySFX(shootSound);
}
【命中】hit.point 着弹点、hit.normal 法线(弹孔贴墙方向)。
【射速】冷却控制(第 214 课)。
【散射】(进阶)命中点加随机偏移模拟后坐力。
【测试】准星射敌人扣血、墙上留弹孔。
【注意】hitMask 过滤只打敌人/墙壁。
【完成】“能打中”了!
💡
3D 射击 = 准星射线 + 命中伤害 + 弹孔特效。一套三样。
◆
伤害与反馈
让“打中”有反馈。
【伤害接口】Enemy 脚本:
public int hp = 100;
public void TakeDamage(int dmg) {
hp -= dmg;
// 受击反馈:闪红/粒子/音效
StartCoroutine(FlashRed());
if (hp <= 0) Die();
}
【受击闪红】材质变色 0.1s 恢复(协程)。
【死亡】Die():播死亡动画/特效、加分数、销毁。
【命中 UI】准星变红/命中标记(可选)。
【音效】命中 vs 未命中不同音效。
【击退】命中间歇 AddForce(物理反馈)。
【伤害数值】(进阶)飘字“20”(世界空间 TextMesh 弹出上升)。
【头部判定】(进阶)多层碰撞区分部位伤害。
【测试】打敌人有反馈、死亡正常。
【注意】死亡后防止重复受伤(isDead 标记)。
【完成】射击“手感”出来了!
✅
命中反馈五件套:闪红、粒子、音效、飘字、击退。反馈齐手感妙。
⚠
常见错误与排查
⛔
错误:
打不中敌人?
原因:
LayerMask 过滤或敌人没碰撞体
解决:
确认敌人有 Collider 且在 hitMask 层;射线从相机中心出。
★
动手练习
课后小任务(做出来才算真的学会)
实现射线射击与伤害
加弹孔与受击反馈
实现死亡与计分
✓
本节小结
3D 射击完成。下一课做投掷物。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
3D 敌人与 AI 导航
下一课 →
3D 投掷物(手雷/弓箭)
↑