Unity 射线检测

要使用射线检测,物体必须是触发器或者碰撞器。
什么是触发器,碰撞器请看https://blog.csdn.net/qq_27461747/article/details/104492748

射线检测函数在Physics 类中。由于射线无法看见,调试起来非常不方便。Unity 给我们提供了一个画射线的方法Debug.DrawRay,便于调试。Debug.DrawRay需要在Update中使用,否则渲染一帧就会消失。一帧时间太短。人眼是看不见的。

Physics.Raycast 使用此函数来发射一条射线。射线碰到物体将停止。也就是最多检测到一个物体。
参数:
Ray : 射线,这是一个结构体,有两个字段origin 描述起点,direction秒速方向。
maxDistance:这条射线的最大长度,默认值是无穷大。
layerMask:只检查哪些层。这个数字的意义不是十进制,是二进制数。Unity最多有32个层,一个int 整数 是32位二进制数。那位2进制数是1,那么就表示将检查这一层,比如说5 这个数表示的二进制是 101 ,第0位与第2位二进制数是1表示将检查第0层 与 第2层。默认是2的31次方减1。也就是全部检测。
RaycastHit:是射线击中的一些信息。
QueryTriggerInteraction: 是用来控制是否忽略触发器的。Ignore表示忽略掉触发器,Collide 表示检测触发器。UseGlobal 是说遵循Unity编辑器的设置。此项设置在Edit->Project Setting->Physics 中的Queris Hit Triggers,如果勾选则将检测触发器,不勾选则不检测触发器。不论如何碰撞器一定会检测。

Physics.RaycastAll:此函数与 Physics.Raycast 的区别是可以检测多个被射线碰到的物体。返回值是一个碰撞信息数组,不管有没有碰到物体,数组都不是空值,如果没有碰到物体数组的长度将是0。

Physics.RaycastNonAlloc:此函数与Physics.RaycastAll 类似,也是检测被射线碰到的物体。区别在与返回值,Physics.RaycastAll 返回值是一个整数,是被射线碰撞到的物体数量。碰撞到的结果信息是RaycastHit的一个数组,用户自己实例化后传入数组。射线碰撞到的物体数量不受returns数组长度的影响。但是碰撞信息受到return长度的影响,如果长度不足以装下碰撞信息,后面的碰撞信息将会被忽略。

Physics.SphereCast 这个太不好理解。Raycast发射的是一条射线,Sphere 可以想象成发射无数条射线,呈现圆柱形(一个原柱形从底部往上发射射线)。检测的是一个范围。另外的SphereCastAll与SphereCastNonAlloc的参考RaycastAll,RaycastNonAlloc。

除此之外还有BoxCast、CapsuleCast、Linecast。

Linecast与射线非常相像,射线只有一个端点,向一个方向发射。线段有两个端点,没有方向。就是点与点的连线。类似于射线检测。只是用法不一样。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值