U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 13 章 · 2D 游戏开发
/
第 214 课
LESSON 214 · 2D 游戏开发
2D 射击游戏基础
2D 射击骨架完成。下一课做子弹与弹幕。
⏱ 约 16 分钟
📊 难度:
入门
🗂 第 13 章 · 2D 游戏开发
📍 第 214 / 300 课
课程进度
214 / 300
🎯
本节学习目标
实现射击发射
实现子弹飞行
实现敌人生成
🚀
课程导读
“哒哒哒”扫射——2D 射击的骨架:发射、子弹、敌人、得分。本课实现核心循环。
◆
射击与子弹
瞄准与发射。
【子弹预制体】小矩形/圆形精灵 + Rigidbody2D + Collider2D + 脚本 Bullet:
public float speed = 15f;
void Start() { GetComponent<Rigidbody2D>().velocity = transform.right * speed; Destroy(gameObject, 3f); }
【发射】玩家脚本:
public GameObject bulletPrefab; public Transform firePoint;
void Update() {
if (Input.GetMouseButtonDown(0)) Fire();
}
void Fire() {
// 朝鼠标方向
Vector3 mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mouse.z = 0;
Vector3 dir = (mouse - transform.position).normalized;
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
firePoint.rotation = Quaternion.Euler(0, 0, angle);
Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
AudioManager.Instance.PlaySFX(shootSound);
}
【说明】子弹沿自身 right 方向飞(旋转对齐鼠标)。
【冷却】限制射速:
public float fireCooldown = 0.15f; private float lastFire;
if (Input.GetMouseButtonDown(0) && Time.time - lastFire > fireCooldown) { lastFire = Time.time; Fire(); }
【销毁】子弹 3 秒销毁或撞墙销毁。
【测试】点击射击、子弹飞向鼠标方向。
【注意】子弹要有 Collider 才能打中敌人(触发器或碰撞)。
💡
射击 = 子弹预制体(速度+销毁)+ 鼠标朝向旋转 + 冷却控制。经典三件套。
◆
敌人生成与得分
打靶循环。
【敌人生成器】Spawner 脚本:
public GameObject enemyPrefab;
void Start() { StartCoroutine(SpawnLoop()); }
IEnumerator SpawnLoop() {
while (true) {
yield return new WaitForSeconds(Random.Range(1f, 3f));
Vector2 pos = new Vector2(Random.Range(-8f, 8f), 6f); // 屏幕上方随机
Instantiate(enemyPrefab, pos, Quaternion.identity);
}
}
【敌人】向下移动(velocity.y = -speed),碰子弹死亡:
void OnTriggerEnter2D(Collider2D other) {
if (other.CompareTag("Bullet")) {
GameManager.Instance.AddScore(10);
Destroy(other.gameObject);
Destroy(gameObject);
}
}
【得分】GameManager 加分数 + UI 刷新(第 167 课)。
【玩家受伤】敌人碰到玩家扣血(第 163 课判定)。
【爆炸特效】敌人死亡时实例化小爆炸(第 197-200 课)。
【关卡难度】随时间加快生成速度(GenerationInterval 递减)。
【完成】一个能“打”的 2D 射击循环!
【注意】敌人离开屏幕下缘要销毁,防止堆积(Destroy 或回收到池)。
✅
射击循环 = 生成器 + 子弹击敌 + 得分 + 玩家受伤。循环完整才“好玩”。
⚠
常见错误与排查
⛔
错误:
子弹穿敌人/敌人不受伤?
原因:
碰撞检测或 Tag 不匹配
解决:
确认子弹 Collider 勾 Is Trigger;双方 Tag 正确;OnTriggerEnter2D 写在有刚体的那方。
★
动手练习
课后小任务(做出来才算真的学会)
实现鼠标瞄准射击
做敌人生成器与移动
实现击毁得分与玩家受伤
✓
本节小结
2D 射击骨架完成。下一课做子弹与弹幕。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
2D 视差背景滚动
下一课 →
2D 子弹与弹幕
↑