Version: 2022.3

PhysicsScene2D.GetRayIntersection

切换到手册
public RaycastHit2D GetRayIntersection (Ray ray, float distance, int layerMask= Physics2D.DefaultRaycastLayers);

参数

ray 定义要测试的原点和方向的 3D 射线。
distance 光线的最大投射距离。
layerMask 过滤器,用于仅在特定层上检测碰撞体。

返回

RaycastHit2D 返回的投射数量。

描述

向 PhysicsScene2D 中的碰撞体投射 3D 射线,仅返回第一个交点。

从概念上说,raycast 类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何对象。对于确定视线、炮火击中的目标以及游戏中的许多其他目的来说,射线投射很有用。

与执行 2D 交点测试的 Raycast 不同,此函数对 2D 碰撞体执行 3D 交点测试。此函数通过将 3D 射线投射到 2D 空间来实现此目的,然后执行 2D 交点测试,通过原始 3D 射线的 Z 方向对结果进行排序。在这种情况下,仅返回第一个结果。

函数返回一个 RaycastHit2D 对象,该对象引用了射线命中的 Collider2D(如果未命中任何对象,则结果的碰撞体属性将为 NULL)。

layerMask 可用于仅在特定层上有选择地检测对象(例如,这让您能够仅将检测应用于敌人角色)。使用 contactFilter 的此方法重载可以按 ContactFilter2D 中提供的选项筛选结果。

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

另请参阅:PhysicsScene2D 类、RaycastHit2D 类、Physics2D.DefaultRaycastLayersPhysics2D.IgnoreRaycastLayerPhysics2D.queriesHitTriggers


public int GetRayIntersection (Ray ray, float distance, RaycastHit2D[] results, int layerMask= Physics2D.DefaultRaycastLayers);

参数

ray 定义要测试的原点和方向的 3D 射线。
distance 光线的最大投射距离。
results 用于接收结果的数组。该数组的大小决定可返回的结果的最大数量。
layerMask 过滤器,用于仅在特定层上检测碰撞体。

返回

int 返回的结果数量。

描述

向 PhysicsScene2D 中的碰撞体投射 3D 射线,返回所有交点。

从概念上说,raycast 类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何对象。对于确定视线、炮火击中的目标以及游戏中的许多其他目的来说,射线投射很有用。

与执行 2D 交点测试的 Raycast 不同,此函数对 2D 碰撞体执行 3D 交点测试。此函数通过将 3D 射线投射到 2D 空间来实现此目的,然后执行 2D 交点测试,通过原始 3D 射线的 Z 方向对结果进行排序。

此函数返回与 3D 射线相交的任何 Collider2D,其结果会返回到提供的数组中。整数返回值为与该线条交叠的对象数(可能为零),但如果结果数组中没有足够的元素来报告所有这些结果,则不会调整该数组的大小。其意义在于不为这些结果分配内存,因此会提高垃圾收集性能。请注意,如果传递空数组,则始终会得到零结果。

layerMask 可用于仅在特定层上有选择地检测对象(例如,这让您能够仅将检测应用于敌人角色)。使用 contactFilter 的此方法重载可以按 ContactFilter2D 中提供的选项筛选结果。

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

所有结果按距离升序排序。

另请参阅:PhysicsScene2D 类、RaycastHit2D 类、Physics2D.DefaultRaycastLayersPhysics2D.IgnoreRaycastLayerPhysics2D.queriesHitTriggers