origin | 射线在 2D 空间中的起点。 |
direction | 表示射线方向的向量。 |
distance | 光线的最大投射距离。 |
layerMask | 过滤器,用于仅在特定层上检测碰撞体。 |
minDepth | 仅包括 Z 坐标(深度)大于或等于该值的对象。 |
maxDepth | 仅包括 Z 坐标(深度)小于或等于该值的对象。 |
RaycastHit2D 返回的投射数量。
向场景中的碰撞体投射射线。
从概念上说,射线投射 类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何对象。
函数返回一个 RaycastHit 对象,该对象引用了射线命中的碰撞体(如果未命中任何对象,则结果的碰撞体属性将为 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.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); } } }
origin | 射线在 2D 空间中的起点。 |
direction | 表示射线方向的向量。 |
contactFilter | 接触筛选器,用于以不同方式筛选结果,例如按层遮罩、Z 深度或法线角度。 |
results | 用于接收结果的数组。该数组的大小决定可返回的结果的最大数量。 |
distance | 光线的最大投射距离。 |
int
返回放置在 results
数组中的结果数。
向场景中的碰撞体投射射线。
从概念上说,射线投射 类似于从空间中的某个点朝特定方向发射一条光束。在该过程中,可以检测并报告与光束接触的任何对象。
该函数返回找到的接触点数,并将这些接触点放入 results
数组。也可以通过 contactFilter
对结果进行过滤。
另请参阅:ContactFilter2D 和 RaycastHit2D。