版本:Unity 6(6000.0)
语言英语
  • C#

Physics2D.Raycast

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有意见,但我们会认真对待用户建议的每一项修改,并在适当的位置进行更新。

关闭

提交失败

由于某种原因无法提交您的修改建议。请在几分钟后<a>重试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

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

参数

origin 射线原点的二维空间中的点。
direction 表示射线方向的矢量。
distance 发送射线的最大距离。
layerMask 仅检测特定图层上的碰撞体过滤器。
minDepth 仅包含 Z 坐标(深度)大于或等于此值的物体。
maxDepth 仅包含 Z 坐标(深度)小于或等于此值的物体。

返回值

RaycastHit2D 返回的检测结果。

说明

针对场景中的碰撞体发射射线。

从概念上讲,射线投射就像从空间某一点沿着特定方向发射的激光束。可以检测出任何与该束接触的物体并做出报告。

该函数返回一个 RaycastHit2D 对象,其中包含射线击中的碰撞体的引用(如果未击中任何物体,结果中的碰撞体属性将为 NULL)。layerMask 可用于选择性地仅检测特定图层上的物体(例如,这允许你仅对敌人角色进行检测)。

使用 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) { // 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 射线原点的二维空间中的点。
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 射线原点的二维空间中的点。
direction 表示射线方向的矢量。
contactFilter 用于通过图层蒙版、Z 深度或法线角度等不同方式对结果进行过滤的接触过滤器。
results 接收到结果的列表。
distance 发送射线的最大距离。

返回值

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

说明

针对场景中的碰撞体发射射线。

整型返回值是被写入 results 列表中的结果数目。如果结果列表没有包含足够多能够报告所有结果的元素,则将对其进行调整。这将防止在不需要调整 results 列表大小时为结果分配内存,并当该查询频繁执行时提高垃圾回收性能。

这些接触点也可以通过 contactFilter 过滤。

附加资源:ContactFilter2DRaycastHit2D