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

2D 碰撞体

2D 碰撞已掌握。下一课学 2D 物理材质。

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

🎯本节学习目标

  • 掌握碰撞体类型
  • 掌握碰撞回调
  • 掌握触发器

🚀课程导读

碰撞体是 2D 物体的“身体”:决定能不能撞、能不能踩、能不能触发。本课掌握。

2D 碰撞体类型

按形状选。

  1. 【BoxCollider2D】矩形:箱子、墙面、平台(最常用)。
  2. 【CircleCollider2D】圆形:球、轮子、碰撞手感更圆润。
  3. 【CapsuleCollider2D】胶囊:角色(两头圆矩形,贴合人形)。
  4. 【PolygonCollider2D】多边形:自定义复杂形状(地形、异形物体)。
  5. 【EdgeCollider2D】边线:只当“边”(悬崖边缘、围墙线)。
  6. 【添加】选中物体 → Add Component → 搜 Collider2D 类型。
  7. 【调整】Scene 视图里拖动碰撞体边框贴合精灵(或用 Edit Collider 编辑)。
  8. 【Is Trigger】勾选=触发器(不阻挡、只触发事件)。
  9. 【共享】多个 Collider2D 可叠加(复合身体)。
  10. 【贴合】用精灵大小自动生成:Sprite 加 Polygon Collider 自动贴合轮廓。
  11. 【注意】碰撞体决定“物理范围”,与精灵显示大小要匹配。
💡
碰撞体选择:角色=Capsule、方块=Box、圆形物=Circle、复杂地形=Polygon。贴合精灵是关键。

碰撞与触发回调

碰撞时“喊”代码。

  1. 【碰撞回调】OnCollisionEnter2D / OnCollisionStay2D / OnCollisionExit2D:
  2. void OnCollisionEnter2D(Collision2D other) {
  3. if (other.gameObject.CompareTag("Enemy")) { TakeDamage(); }
  4. }
  5. 【触发回调】OnTriggerEnter2D / OnTriggerStay2D / OnTriggerExit2D:
  6. void OnTriggerEnter2D(Collider2D other) {
  7. if (other.CompareTag("Coin")) { CollectCoin(); }
  8. }
  9. 【前提】要有碰撞的双方:一方有 Rigidbody2D;至少一方 Collider 是 Trigger(触发)。
  10. 【参数】other.gameObject 拿到撞到的对象;CompareTag 判断类型。
  11. 【区别】OnCollision 是物理阻挡的碰撞;OnTrigger 是“穿过去”的触发(金币、传送门)。
  12. 【层】用 Layer(第 88 课)过滤碰撞:Edit → Project Settings → Physics2D 设置 Layer 碰撞矩阵。
  13. 【注意】被触发对象(如金币)用 Is Trigger,不需要 Rigidbody 也能被触发(但建议加)。
  14. 【实战】金币(Trigger)+ 玩家:进入触发 CollectCoin。
  15. 【完成】碰撞体系“活了”。
碰撞 vs 触发:阻挡用 OnCollision、穿过/拾取用 OnTrigger。记住这句够用。

常见错误与排查

错误:触发器没触发?
原因:没有 Rigidbody2D、或不是 Trigger、或 Tag 不匹配
解决:确认一方有 Rigidbody2D;触发方 Collider 勾 Is Trigger;Tag 正确。

动手练习

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

  • 给角色加 Capsule、地面加 Box 碰撞
  • 实现 OnCollision2D 撞敌扣血
  • 实现金币 Trigger 拾取

本节小结

2D 碰撞已掌握。下一课学 2D 物理材质。

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

← 上一课2D 刚体与物理