RaycastHit2D是Unity中的一个结构体,用于存储对2D场景中的物体进行射线投射后的结果。射线投射是一种用于检测物体之间交互的技术,通过从一个点向某个方向发出一条射线,然后检测射线是否与场景中的物体相交,如果相交就返回相交点的信息。
RaycastHit2D结构体包含以下属性:
- collider:返回与射线相交的物体的碰撞器。
- transform:返回与射线相交的物体的变换组件。
- point:返回与射线相交的点的坐标。
- normal:返回与射线相交的点的法线方向。
- distance:返回射线起点到相交点的距离。
射线检测之指定层级
定义一个射线,从当前物体发射,向下,长度1,只检测层级为8的。
这里的raycastHit2D返回一个0或者非零的值,可用于设置bool变量用于判断是否检测到物体。
//向下进行检测(开始位置,方向,长度,层级)
RaycastHit2D raycastHit2d = Physics2D.Raycast(startDetection.position, Vector2.down, 1, 1 << 8);
//画出射的位置,采用DrawLine方法(开始位置,结束位置,颜色,长度)
Debug.DrawLine(startDetection.position, startDetection.position + Vector3.down, Color.red, 1f);
//向前进行检测
RaycastHit2D raycastHit2dForward = Physics2D.Raycast(startDetection.position,(spriteRenderer.flipX?Vector2.left:Vector2.right),0.5f, 1 << 8);
Debug.DrawLine(startDetection.position, startDetection.position + (spriteRenderer.flipX ? Vector3.left : Vector3.right), Color.red, 0.5f);
以下是关于raycastHit的所有重载方法
public static int Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, RaycastHit2D[] results, [Internal.DefaultValue("Mathf.Infinity")] float distance);
public static int Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, List<RaycastHit2D> results, [Internal.DefaultValue("Mathf.Infinity")] float distance = float.PositiveInfinity);
[ExcludeFromDocs]
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction);
[ExcludeFromDocs]
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance);
[ExcludeFromDocs]
public static int Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, RaycastHit2D[] results);
[ExcludeFromDocs]
[RequiredByNativeCode]
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance, int layerMask);
//
// 摘要:
// Casts a ray against colliders in the Scene.
//
// 参数:
// origin:
// The point in 2D space where the ray originates.
//
// direction:
// A vector representing the direction of the ray.
//
// distance:
// The maximum distance over which to cast the ray.
//
// layerMask:
// Filter to detect Colliders only on certain layers.
//
// minDepth:
// Only include objects with a Z coordinate (depth) greater than or equal to this
// value.
//
// maxDepth:
// Only include objects with a Z coordinate (depth) less than or equal to this value.
//
// 返回结果:
// The cast results returned.
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, [Internal.DefaultValue("Mathf.Infinity")] float distance, [Internal.DefaultValue("DefaultRaycastLayers")] int layerMask, [Internal.DefaultValue("-Mathf.Infinity")] float minDepth, [Internal.DefaultValue("Mathf.Infinity")] float maxDepth);
[ExcludeFromDocs]
public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance, int layerMask, float minDepth);