(每日一题)碰撞检测(第五十八讲)

(每日一题)碰撞检测(第五十八讲)

第五十八讲 碰撞检测:射线碰撞检测在前面的刚体结构中我们介绍,刚体与刚体、刚体与碰撞器之间的碰撞。这些碰撞都有一些共同的特点是碰撞的物体之间发生实际的接触。在unity中还提供了一种射线检测的方式。使用此种方式我们可以使用一条看不见的具有一定长度的射线来检测是否与其他的碰撞器之间发生了接触游戏动态,此种功能的实现是通过物理类中的raycast函数来实现的。类函数中我们可以使用raycast来发射一条射线来检测是否与其他的碰撞器发生了碰撞。在函数中我们可以设置函数的起点射线的方向以及射线的长度及选择性的设置拒绝用碰撞器发生碰撞等来进行碰撞检测。此种多运用于多种典型的情景中,例如在射击类游戏中我们不会去实际的检测子弹是否与某些物体发生了碰撞而是通过发射射线的方式来检测子弹是否击中了某些物体unity射线检测检测不到物体,并以此来做出反应。例如在此场景中控制器物体是否与某物体发生了碰撞,在第一人称中心物体发出一条射线,然后在不进行接触的情况下我们就可以检测其物体是否与其他物体发生了碰撞。我们可以新建一个脚本命名此脚本为rayCheck。在脚本编辑器中打开,然后我们可以在脚本中添加射线检测的功能。我们首页要声明一个变量hitunity射线检测检测不到物体,其类型为RayCastHit。此变量用于存储射线碰到了哪些物体,并把其信息保存在当中。我们使用一个if语句,如果接触到某些物体就会返回为真。代码如图所示:我们可以看下我们的脚本中是否存在错误,在底部的控制栏中是否还有错误信息。然后我们在场景中创建一个Cube物体,在Cube物体中BoxCollider这样我们就可以检测我们的射线是否碰撞了我们的盒子物体。我们可以对盒子物体进行缩放并调整其位置,然后我们需要拖动其脚本到第一人称角色控制器物体中。因为在脚本中我们引用的是第一人称角色控制器物体的位置,也就是射线的发出位置。可以看见我们的脚本显示在控制器中。然后播放场景我们回到盒子的位置游戏开发素材,注意当我们的射线只要碰到了盒子物体,我们可以看到在底部的控制信息栏中就会显示相应的输出信息。只要是我们射线接触到盒子物体,相应的if语句就会执行,这就是用射线检测的好处。我们不需要实际的发生碰撞并且可以检测距离方向,此种射线的检测方式也常用于其他的应用中。

u3d射线检测_ugui射线检测_unity射线检测检测不到物体

文章来源:https://max.book118.com/html/2017/0730/125311934.shtm