
Unity 中的 Raycast(光线投射)功能允许查看 Ray 是否与场景中的另一个目标对象发生碰撞,假如发生碰撞,则将命中数据保存到 Raycast Hit 变量中。
Raycast 有几个不同的版本,每个版本都来自不同的类,可以以不同的方式运用,但是,运用 Raycast 的最常见方法之一是运用物理类,它返回布尔值 true 或 false,这详细取决于碰撞的目标对象:
void FireRay()
{
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hitData;
Physics.Raycast(ray, out hitData);
}
这样会将创建的射线发射到场景中,并将有关任何被碰撞的信息保存到 Raycast Hit 变量中。

因为 Raycast 带有一个输出 Raycast Hit 参数,那么在调用它时需要指定一个 Raycast Hit 变量。
然后当函数运行时,Raycast Hit 数据将存储在指定的变量中,允许我们访问它。上面的 out字段 允许保存除了 Raycast 的返回类型之外的信息。
当然我们也可以将 Raycast 函数置于 if 条件中:
void Update()
{
Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hitData;
if (Physics.Raycast(ray, out hitData))
{
//射线碰到了什么!!
}
}
以这种方式使用 Raycast 那么 if 条件中的代码只有在 Ray 实际碰撞到了物体对象时才会运行。
这很有用的,因为可以将代码限制为仅在实际存在时使用 Raycast Hit 数据或者仅在 Raycast 成功时执行操作。
当然一般情况下是否成功执行在于它是否碰撞了物体对象。但是,由于 Raycast 的附加功能,也可以通过其他方式限制为碰撞到的内容。
例如限制光线的距离,排除某个层或选择是否应该忽略触发的对撞机,最终需要查看使用的 Raycast 函数的重载方法。