Physics.Raycast

Physics.Raycast

介绍

Physics.Raycast 是 Unity 中用于检测物体之间碰撞的函数之一。它使用一条射线来检测场景中的物体,返回一个 bool 值表示是否检测到了碰撞,以及一个 RaycastHit 结构体存储着射线碰撞到的物体的信息。

方法

Physics.Raycast 的完整签名如下:

bool Physics.Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance = Mathf.Infinity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);

该函数的参数如下:

  • ray:一条用于检测碰撞的射线。
  • hitInfo:一个 RaycastHit 结构体,存储着射线碰撞到的物体的信息。
  • maxDistance:射线的最大长度,表示在这个距离内检测碰撞。
  • layerMask:一个用于指定哪些物体应该被检测的层蒙版。可以使用 LayerMask.NameToLayer() 函数将层的名称转换为相应的层蒙版。
  • queryTriggerInteraction:一个用于指定是否应该检测触发器的枚举类型。默认情况下,它使用 QueryTriggerInteraction.UseGlobal,该值使用全局的触发器检测设置。

举例子

示例 1:使用射线检测物体

下面的示例代码演示了如何使用 Physics.Raycast 函数进行射线检测:

Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
    Debug.Log("Hit object: " + hit.collider.gameObject.name);
}

在这个示例中,我们创建了一条射线,起点为当前物体的位置,方向为当前物体的正前方。然后,我们使用 Physics.Raycast 函数进行射线检测,检测是否有物体与射线相交。如果有相交,hit 变量中将包含碰撞物体的信息,我们在控制台上输出该物体的名称。

示例 2:指定检测范围

下面的示例代码演示了如何指定射线的最大长度,以限制射线检测的范围:

Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 10.0f))
{
    Debug.Log("Hit object: " + hit.collider.gameObject.name);
}

在这个示例中,我们创建了一条射线,起点为当前物体的位置,方向为当前物体的正前方。然后,我们使用 Physics.Raycast 函数进行射线检测,并指定最大长度为 10。这意味着射线只会在距离当前物体不超过 10 的范围内进行检测。如果有相交,hit 变量中将包含碰撞物体的信息,我们在控制台上输出该物体的名称。

示例 3:指定检测层次

下面的示例代码演示了如何指定只检测特定层次的物体:

Ray ray = new Ray(transform.position, transform.forward);
RaycastHit hit;
int layerMask = LayerMask.GetMask("MyLayer");
if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
{
    Debug.Log("Hit object: " + hit.collider.gameObject.name);
}

在这个示例中,我们创建了一条射线,起点为当前物体的位置,方向为当前物体的正前方。然后,我们使用 LayerMask.GetMask 函数获取名为 "MyLayer" 的层次的层蒙版,表示只检测该层次的物体。最后,我们使用 Physics.Raycast 函数进行射线检测,并指定层蒙版。如果有相交,hit 变量中将包含碰撞物体的信息,我们在控制台上输出该物体的名称。注意,在这个示例中,我们还指定了最大长度为 Mathf.Infinity,表示不限制射线的最大长度。

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忽然602

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值