U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 13 章 · 2D 游戏开发
/
第 212 课
LESSON 212 · 2D 游戏开发
2D 道具与收集系统
道具收集完成。下一课做 2D 视差背景。
⏱ 约 13 分钟
📊 难度:
入门
🗂 第 13 章 · 2D 游戏开发
📍 第 212 / 300 课
课程进度
212 / 300
🎯
本节学习目标
实现金币收集
实现效果道具
实现道具刷新
🚀
课程导读
“捡金币”是 2D 游戏的“正反馈”。本课做金币与效果道具系统。
◆
金币收集
触碰即收。
【金币预制体】圆形精灵(金色)+ CircleCollider2D(Is Trigger)+ 旋转动画(可选)。
【脚本 Coin】
void OnTriggerEnter2D(Collider2D other) {
if (other.CompareTag("Player")) {
GameManager.Instance.AddScore(10);
AudioManager.Instance.PlaySFX(coinSound);
Destroy(gameObject);
}
}
【加分】调 GameManager(单例)加分数并通知 UI(第 167 课)。
【音效】拾取音效(第 173 课)。
【特效】拾取小粒子(可选)。
【批量】场景放多个金币,可做成预制体摆放。
【注意】金币用 Trigger,玩家经过即收。
【完成】满地图金币可捡!
💡
金币 = Trigger + 加分 + 音效 + 销毁。四步。
◆
效果道具
吃了变强。
【设计】道具类型:加速(SpeedUp)、无敌(Invincible)、加血(Heal)、双倍分。
【实现】用枚举或 ScriptableObject 区分:
public enum PowerUpType { Speed, Invincible, Heal }
public PowerUpType type;
void OnTriggerEnter2D(Collider2D other) {
if (other.CompareTag("Player")) {
PlayerController pc = other.GetComponent<PlayerController>();
switch (type) {
case PowerUpType.Speed: pc.BoostSpeed(2f, 5f); break;
case PowerUpType.Invincible: pc.SetInvincible(true, 5f); break;
case PowerUpType.Heal: pc.Heal(20); break;
}
Destroy(gameObject);
}
}
【玩家方法】BoostSpeed/SetInvincible/Heal 在玩家脚本里实现(加时器)。
【计时器】无敌 5 秒:用协程等待后恢复。
【道具刷新】定时重新生成:协程延时后重新激活(对象池/SetActive)。
【道具特效】发光环绕/飘动动画标识道具。
【音效】不同道具不同音效。
【完成】道具系统“香”了!
✅
道具 = 枚举类型 + 触发生效 + 玩家方法 + 计时恢复。可扩展任意道具。
⚠
常见错误与排查
⛔
错误:
道具拾取没反应?
原因:
没 Tag Player、或玩家没碰撞体、或 Trigger 没勾
解决:
确认金币 Is Trigger、玩家有 Collider2D+Rigidbody2D、Tag 匹配。
★
动手练习
课后小任务(做出来才算真的学会)
做金币收集与加分
做加速与无敌道具
做道具定时刷新
✓
本节小结
道具收集完成。下一课做 2D 视差背景。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
2D 敌人 AI(巡逻与追击)
下一课 →
2D 视差背景滚动
↑