一、射线:

Physics2D.Raycast( )

  • 必须参数:起点、方向
  • 可选参数:距离、Z轴深度、过滤条件(检测哪些、是否检测触发碰撞器等)
  • out 参数:RaycastHit2D[ ] (存放碰撞返回的结果)
  • 返回值:int  (表示碰撞结果的个数)/ RaycastHit2D(射线碰撞的结果)

备注:如果射线从碰撞体内部发出,可以使用collider2d.Raycast( )方法

手册链接:Physics2D-Raycast - Unity 脚本 API


二、与碰撞体相关的射线/投射:

1.【射线】

Collider2D.Raycast()

将光线投射到从碰撞体位置开始的场景中,并忽略碰撞体本身。

  • 必须参数:方向
  • 可选参数:距离、层、Z轴深度、过滤条件(检测哪些、是否检测触发碰撞器等)
  • out 参数:RaycastHit2D[ ] (存放碰撞返回的结果)
  • 返回值:int  (表示碰撞结果的个数)

手册链接:Collider2D-Raycast - Unity 脚本 API

2.【碰撞体投射】

collider2D.cast()

将碰撞体形状投射到从该碰撞体位置开始的场景中,而忽略该碰撞体本身。

  • 必须参数:方向
  • 可选参数:距离、层、Z轴深度、过滤条件(检测哪些、是否检测触发碰撞器等)
  • out 参数:RaycastHit2D[ ] (存放碰撞返回的结果)
  • 返回值:int  (表示碰撞结果的个数)

Collider2D-Cast - Unity 脚本 API

rigidbody2D.Cast()

附加到 Rigidbody2D 的所有 Collider2D 形状都将投射到场景中 - 从每个碰撞体的位置开始,忽略附加到同一个 Rigidbody2D 的碰撞体

  • 必须参数:方向
  • 可选参数:距离、层、Z轴深度、过滤条件(检测哪些、是否检测触发碰撞器等)
  • out 参数:RaycastHit2D[ ] (存放碰撞返回的结果)
  • 返回值:int  (表示碰撞结果的个数)

Rigidbody2D-Cast - Unity 脚本 API


三、形状投射

Physics2D.BoxCast()

从概念上说,BoxCast 就像朝特定方向拖动一个盒体穿过场景一样。在该过程中,可以检测并报告与盒体接触的任何对象。

与之功能相同的函数还有以下几个,区别是形状不同(胶囊,圆形,线段):

CapsuleCast

CircleCast

Linecast

返回值:这些方法返回一个 RaycastHit2D 对象,可通过它获取命中的碰撞器、接触点、法线等信息。

参数:除了用于指定各个形状大小/半径的参数外,origin指定起点, direction用于指定投射的方向。

可选参数:LayerMask 用于有选择地检测某些图层上的对象。 distance用于指定投射的距离,以及minDepth和maxDepth,用于指定在Z轴上的区间限制。

Physics2D.BoxCastAll

与上面的方法用法相似,区别是它返回一个数组,包含所有命中的RaycastHit2D 对象。

以及CapsuleCastAll

CircleCastAll

LinecastAll

其他

除了上面这些,physics2D类还有许多非常实用的投射方法,比如Overlap开头的一系列方法,用于检查某碰撞器是否在某个区域内,或者获取指定区域内所有碰撞器,检查碰撞器是否与某个点重叠,等等。方法繁多,不一一记录啦。如有需要可以浏览官方手册:

Physics2D - Unity 脚本 API


碰撞返回的结果 :RaycastHit2D

可以通过返回的 RaycastHit2D变量 获取到碰撞的各种信息

RaycastHit2D hit;

常用的有: 

  • hit.collider / rigidbody / transform
    • 碰撞对象的collider / rigidbody / transform
  • hit.distance
  • hit.point
    • 射线命中碰撞体表面的点(世界空间中)。
  • hit.normal 
    • 射线命中的表面的法线矢量。

相关博文:

Unity 2D射线基本使用和画线

【why】Physics2D.Raycast 的可选参数LayerMask使用后检测不到碰撞
【why】2D射线检测屏幕某一点是否有物体,检测不到碰撞(Queries Start In Colliders的坑
 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐