RaycastHit2D 是Unity中對於2d的一個支持類,
從其名稱來看,RaycastHit2D是投射一段光線 並且擊打,沒錯,這個類是由方法
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction);
//
// Summary:
// Casts a ray against colliders in the scene.
[ExcludeFromDocs]
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance);
//
// Summary:
// Casts a ray against colliders in the scene.
[ExcludeFromDocs]
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance, int layerMask);
//
// Summary:
// Casts a ray against colliders in the scene.
[ExcludeFromDocs]
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance, int layerMask, float minDepth);
//
// Summary:
// Casts a ray against colliders in the scene.
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance, int layerMask, float minDepth, float max Depth);
的返回值。
origin:起始點位置
direction:方向向量
distance:發射光線的距離
...其餘參數暫未研究
解釋的具體一點就是,在unity場景中的某個點發射一條射線,射線的長度和方向可以控制,返回這條射線首先碰撞到的帶有2d碰撞體的物體。
這裏要注意的是 如果使用Raycast() 方法就是返回第一個觸碰到的物體,如果想想返回所有哦觸碰到的物體,需要使用RaycastAll() 這個方法,次方法返回的是所有碰撞到的物體的集合。
使用Raycast() 需要非常小心,因爲往往我們在使用這個函數時候,目的常是判斷一個物體的某個方向是否有某物體,這個時候發射的射線的起始點不能設置爲這個物體的位置,如果不小心設置了,那就要注意了。如果你這個物體是有碰撞體的,這個射線永遠只會返回自己,因爲你是從這個物體的內部發射的射線。
我就是在使用過程中犯了這個錯誤,以爲發射的射線只會按自己的想法去尋找需要判斷的物體,這種想當然的做法是不對的。