首页/ 第 13 章 · 2D 游戏开发/ 第 212 课
LESSON 212 · 2D 游戏开发

2D 道具与收集系统

道具收集完成。下一课做 2D 视差背景。

⏱ 约 13 分钟📊 难度:入门🗂 第 13 章 · 2D 游戏开发📍 第 212 / 300 课
课程进度
212 / 300

🎯本节学习目标

  • 实现金币收集
  • 实现效果道具
  • 实现道具刷新

🚀课程导读

“捡金币”是 2D 游戏的“正反馈”。本课做金币与效果道具系统。

金币收集

触碰即收。

  1. 【金币预制体】圆形精灵(金色)+ CircleCollider2D(Is Trigger)+ 旋转动画(可选)。
  2. 【脚本 Coin】
  3. void OnTriggerEnter2D(Collider2D other) {
  4. if (other.CompareTag("Player")) {
  5. GameManager.Instance.AddScore(10);
  6. AudioManager.Instance.PlaySFX(coinSound);
  7. Destroy(gameObject);
  8. }
  9. }
  10. 【加分】调 GameManager(单例)加分数并通知 UI(第 167 课)。
  11. 【音效】拾取音效(第 173 课)。
  12. 【特效】拾取小粒子(可选)。
  13. 【批量】场景放多个金币,可做成预制体摆放。
  14. 【注意】金币用 Trigger,玩家经过即收。
  15. 【完成】满地图金币可捡!
💡
金币 = Trigger + 加分 + 音效 + 销毁。四步。

效果道具

吃了变强。

  1. 【设计】道具类型:加速(SpeedUp)、无敌(Invincible)、加血(Heal)、双倍分。
  2. 【实现】用枚举或 ScriptableObject 区分:
  3. public enum PowerUpType { Speed, Invincible, Heal }
  4. public PowerUpType type;
  5. void OnTriggerEnter2D(Collider2D other) {
  6. if (other.CompareTag("Player")) {
  7. PlayerController pc = other.GetComponent<PlayerController>();
  8. switch (type) {
  9. case PowerUpType.Speed: pc.BoostSpeed(2f, 5f); break;
  10. case PowerUpType.Invincible: pc.SetInvincible(true, 5f); break;
  11. case PowerUpType.Heal: pc.Heal(20); break;
  12. }
  13. Destroy(gameObject);
  14. }
  15. }
  16. 【玩家方法】BoostSpeed/SetInvincible/Heal 在玩家脚本里实现(加时器)。
  17. 【计时器】无敌 5 秒:用协程等待后恢复。
  18. 【道具刷新】定时重新生成:协程延时后重新激活(对象池/SetActive)。
  19. 【道具特效】发光环绕/飘动动画标识道具。
  20. 【音效】不同道具不同音效。
  21. 【完成】道具系统“香”了!
道具 = 枚举类型 + 触发生效 + 玩家方法 + 计时恢复。可扩展任意道具。

常见错误与排查

错误:道具拾取没反应?
原因:没 Tag Player、或玩家没碰撞体、或 Trigger 没勾
解决:确认金币 Is Trigger、玩家有 Collider2D+Rigidbody2D、Tag 匹配。

动手练习

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

  • 做金币收集与加分
  • 做加速与无敌道具
  • 做道具定时刷新

本节小结

道具收集完成。下一课做 2D 视差背景。

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

← 上一课2D 敌人 AI(巡逻与追击)