当前位置:   article > 正文

Unity 射线检测_physics.raycastnonalloc

physics.raycastnonalloc

要使用射线检测,物体必须是触发器或者碰撞器。
什么是触发器,碰撞器请看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与射线非常相像,射线只有一个端点,向一个方向发射。线段有两个端点,没有方向。就是点与点的连线。类似于射线检测。只是用法不一样。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/98355
推荐阅读
相关标签
  

闽ICP备14008679号