origin | 射线原点的二维空间中的点。 |
direction | 表示射线方向的矢量。 |
distance | 发送射线的最大距离。 |
layerMask | 仅检测特定图层上的碰撞体过滤器。 |
minDepth | 仅包含 Z 坐标(深度)大于或等于此值的物体。 |
maxDepth | 仅包含 Z 坐标(深度)小于或等于此值的物体。 |
RaycastHit2D 返回的检测结果。
针对场景中的碰撞体发射射线。
从概念上讲,射线投射就像从空间某一点沿着特定方向发射的激光束。可以检测出任何与该束接触的物体并做出报告。
该函数返回一个 RaycastHit2D 对象,其中包含射线击中的碰撞体的引用(如果未击中任何物体,结果中的碰撞体属性将为 NULL)。layerMask 可用于选择性地仅检测特定图层上的物体(例如,这允许你仅对敌人角色进行检测)。
使用 contactFilter
的此方法的重载可以根据 ContactFilter2D 中可用的选项来筛选结果。
射线投射对于确定视距、枪击目标以及游戏中许多其他用途非常有用。
此外,这还将在射线开始时检测到碰撞器。在本例中,射线从碰撞器内部开始,并没有与碰撞器表面相交。这意味着无法计算碰撞法线,在这种情况下,返回的碰撞法线将设置为所测试的射线向量的反数。这一点很容易检测到,因为此类结果始终是零的 RaycastHit2D 分数。
其他资源:LayerMask 类,RaycastHit2D 类,RaycastAll,Linecast,DefaultRaycastLayers,IgnoreRaycastLayer,raycastsHitTriggers。
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) { // 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); } } }
origin | 射线原点的二维空间中的点。 |
direction | 表示射线方向的矢量。 |
contactFilter | 用于通过图层蒙版、Z 深度或法线角度等不同方式对结果进行过滤的接触过滤器。 |
results | 接受结果的数组。数组的大小决定了可以返回的最大结果数。 |
distance | 发送射线的最大距离。 |
int 返回放置在 results
数组中的结果数目。
针对场景中的碰撞体发射射线。
此函数返回找到的接触点并把这些接触点放在 results
数组中。这些接触点也可以通过 contactFilter
过滤。
附加资源:ContactFilter2D 和 RaycastHit2D。
origin | 射线原点的二维空间中的点。 |
direction | 表示射线方向的矢量。 |
contactFilter | 用于通过图层蒙版、Z 深度或法线角度等不同方式对结果进行过滤的接触过滤器。 |
results | 接收到结果的列表。 |
distance | 发送射线的最大距离。 |
int 返回放置在 results
列表中的结果数目。
针对场景中的碰撞体发射射线。
整型返回值是被写入 results
列表中的结果数目。如果结果列表没有包含足够多能够报告所有结果的元素,则将对其进行调整。这将防止在不需要调整 results
列表大小时为结果分配内存,并当该查询频繁执行时提高垃圾回收性能。
这些接触点也可以通过 contactFilter
过滤。
附加资源:ContactFilter2D 和 RaycastHit2D。