Version: 2021.3
public static RaycastHit2D Raycast (Vector2 origin, Vector2 direction, float distance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, float minDepth= -Mathf.Infinity, float maxDepth= Mathf.Infinity);

参数

origin 射线在 2D 空间中的起点。
direction 表示射线方向的矢量。
distance 射线的最大投射距离。
layerMask 过滤器,用于仅在特定层上检测碰撞体。
minDepth 仅包括 Z 坐标(深度)大于或等于该值的对象。
maxDepth 仅包括 Z 坐标(深度)小于或等于该值的对象。

返回

RaycastHit2D 返回的投射数量。

描述

向场景中的碰撞体投射射线。

从概念上说,射线投射 类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何对象。

This function returns a RaycastHit object with a reference to the Collider that is hit by the ray (the Collider property of the result will be NULL if nothing was hit). The layerMask can be used to detect objects selectively only on certain layers (this allows you to apply the detection only to enemy characters, for example).

使用 contactFilter 的此方法重载可以按 ContactFilter2D 中提供的选项筛选结果。

对于确定视线、炮火击中的目标以及游戏中的许多其他目的来说,射线投射很有用。

此外,这还将检测位于射线起点的碰撞体。在这种情况下,射线从碰撞体内部开始,并且不与碰撞体表面交叠。这意味着无法计算碰撞法线,在这种情况下,返回的碰撞法线设置为正在测试的射线向量的倒数。这可轻松检测到,因为此类结果始终是 RaycastHit2D 分数为零。

另请参阅:LayerMask 类、RaycastHit2D 类、RaycastAllLinecastDefaultRaycastLayersIgnoreRaycastLayerraycastsHitTriggers

using UnityEngine;

public class Example : MonoBehaviour { // Float a rigidbody object a set distance above a surface.

public float floatHeight; // Desired floating height. public float liftForce; // Force to apply when lifting the rigidbody. public float damping; // Force reduction proportional to speed (reduces bouncing).

Rigidbody2D rb2D;

void Start() { rb2D = GetComponent<Rigidbody2D>(); }

void FixedUpdate() { // Cast a ray straight down. RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up);

// If it hits something... if (hit.collider != null) { // Calculate the distance from the surface and the "error" relative // to the floating height. float distance = Mathf.Abs(hit.point.y - transform.position.y); float heightError = floatHeight - distance;

// The force is proportional to the height error, but we remove a part of it // according to the object's speed. float force = liftForce * heightError - rb2D.velocity.y * damping;

// Apply the force to the rigidbody. rb2D.AddForce(Vector3.up * force); } } }

public static int Raycast (Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, RaycastHit2D[] results, float distance= Mathf.Infinity);

参数

origin 射线在 2D 空间中的起点。
direction 表示射线方向的矢量。
contactFilter 接触筛选器,用于以不同方式筛选结果,例如按层遮罩、Z 深度或法线角度。
results 用于接收结果的数组。该数组的大小决定可返回的结果的最大数量。
distance 射线的最大投射距离。

返回

int 返回放置在 results 数组中的结果数。

描述

向场景中的碰撞体投射射线。

从概念上说,射线投射 类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何对象。

该函数返回找到的接触点数,并将这些接触点放入 results 数组。也可以通过 contactFilter 对结果进行过滤。

另请参阅:ContactFilter2DRaycastHit2D


public static int Raycast (Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, List<RaycastHit2D> results, float distance= Mathf.Infinity);

参数

origin 射线在 2D 空间中的起点。
direction 表示射线方向的矢量。
contactFilter 接触筛选器,用于以不同方式筛选结果,例如按层遮罩、Z 深度或法线角度。
results 用于接收结果的列表。
distance 射线的最大投射距离。

返回

int 返回放置在 results 列表中的结果数。

描述

向场景中的碰撞体投射射线。

从概念上说,raycast 类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何碰撞体。

该整数返回值是写入到 results 列表中的结果数。如果结果列表中没有足够的元素来报告所有这些结果,则会调整列表的大小。这可在 results 列表无需调整大小时防止为结果分配内存,可在经常执行查询时提高垃圾收集性能。

也可以通过 contactFilter 对结果进行筛选。

另请参阅:ContactFilter2DRaycastHit2D