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

2D 射线检测

2D 射线已掌握。下一课做完整 2D 平台游戏。

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

🎯本节学习目标

  • 理解 2D 射线
  • 掌握 Raycast2D
  • 实现地面/敌人检测

🚀课程导读

“脚下有没有地面”“前方有没有墙”“敌人看到我了吗”——2D 射线是逻辑“探针”。本课掌握。

Raycast2D 基础

从一点射“探针”。

  1. 【API】Physics2D.Raycast(起点, 方向, 距离, LayerMask);
  2. 返回 RaycastHit2D。
  3. 【示例】向下检测地面:
  4. RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, 0.6f, groundLayer);
  5. if (hit.collider != null) { /* 有地面 */ }
  6. 【判断】hit.collider != null 表示射中了东西。
  7. 【方向】Vector2.down/up/left/right 或自定义。
  8. 【距离】射线长度(检测范围)。
  9. 【LayerMask】过滤只检测某层(地面层/敌人层),避免误判。
  10. 【调试】Debug.DrawRay(起点, 方向*距离, Color.red); 场景里可视化看射线。
  11. 【注意】2D 射线用 Physics2D,别和 3D Physics.Raycast 混用。
  12. 【性能】每帧几次射线没问题,批量上百次要注意(用批处理)。
💡
2D 射线 = Physics2D.Raycast + 判断 hit.collider。一个“探针”搞掂所有检测。

典型应用

地面、悬崖、视野。

  1. 【地面检测替代方案】用射线替代 OverlapCircle(第 205 课)做 grounded:
  2. bool grounded = Physics2D.Raycast(transform.position, Vector2.down, 0.1f, groundLayer).collider != null;
  3. 【悬崖检测】在角色前方地面斜下射一条射线,射不中就“前方是悬崖”(敌人 AI 转向用)。
  4. 【墙体检测】向前射短射线,撞墙停止移动。
  5. 【敌人视野】敌人向前射较长射线 + 视野范围:
  6. RaycastHit2D hit = Physics2D.Raycast(transform.position, facing, sightDist, playerLayer);
  7. if (hit.collider != null) /* 发现玩家,进入追击 */
  8. 【层设置】给玩家/敌人/地面分 Layer(第 88 课),用 LayerMask 精确过滤。
  9. 【LayerMask 写法】int groundLayer = 1 << LayerMask.NameToLayer("Ground");
  10. 【方向翻转】敌人 flipX 后,射线方向也要翻转(用 transform.right 或本地方向)。
  11. 【注意】射线从“原点”出发别穿过自己碰撞体(用 offset 或 LayerMask 过滤自己)。
  12. 【实战】做敌人“悬崖边转身”AI。
  13. 【完成】你的 2D 逻辑“有眼睛”了!
射线三剑客:向下验地、向前验墙、向敌人验视野。2D 逻辑全靠它。

常见错误与排查

错误:射线永远检测不到?
原因:LayerMask 过滤掉了、或起点在自己碰撞体内
解决:确认目标在对应 Layer 且 Mask 包含它;射线起点加偏移避开自身。

动手练习

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

  • 用射线做角色落地检测
  • 做敌人悬崖边转身
  • 做敌人视野发现玩家

本节小结

2D 射线已掌握。下一课做完整 2D 平台游戏。

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

← 上一课2D 物理材质(摩擦与弹性)